【问题标题】:wcf REST response in XML formatXML 格式的 wcf REST 响应
【发布时间】:2011-06-13 02:45:31
【问题描述】:

以下是我的运营合同

[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Xml,
UriTemplate = "Add?num1={a}&num2={b}")]
Addition AddNumbers(string a, string b);

以下是我的 OperationContract 实现,我返回一个 Addition Class 对象

public Addition AddNumbers(string a, string b)
{
Addition objadd = new Addition();
objadd.num1 = a;
objadd.num2 = b;
objadd.num3 = (Convert.ToInt32(a )+ Convert.ToInt32(b)).ToString();
return objadd;
}

以下是我的数据合同

[DataContract(Name="Add")]
public class Addition
{
    private string _num1;
    private string _num2;
    private string _num3;
    [DataMember(Name="FirstNumber",Order=1)]
    public string num1
    {
        set { _num1 = value; }
        get { return _num1; }
    }
    [DataMember(Name="SecondNumber",Order=2)]
    public string num2
    {
        set { _num2 = value; }
        get { return _num2; }
    }
    [DataMember(Name = "Result",Order=3)]
    public string num3
    {
        set { _num3 = value; }
        get { return _num3; }
    }
}

我正在测试我的服务如下 http://localhost/Service1.svc/xml/Add?num1=5&num2=4

当我浏览上面的 URL 时,我得到下面的输出

 <Add 
xmlns="http://schemas.datacontract.org/2004/07/MySampleService"  
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<FirstNumber>5</FirstNumber> 
<SecondNumber>4</SecondNumber> 
<Result>9</Result> 
 </Add>

但我的要求是我的输出应该如下所示

<Add FirstNumber="5" SecondNumbe="4" Result="9">

</Add>

无论如何我可以通过 Datamembers 实现这一目标

【问题讨论】:

    标签: wcf rest


    【解决方案1】:

    其他人可以详细说明这一点,但我相信这是你得到的输出,因为 WCF 默认使用 DataContractSerializer 并且它不支持序列化到属性。如果要支持属性,则必须使用 XmlSerializer。

    您可以在服务级别或操作级别指定序列化程序。

    【讨论】:

      【解决方案2】:

      是的,WCF 确实默认使用 DataContractSerializer,并且出于性能原因它不支持 Xml 属性。 DataContractSerializer 的性能优于 XmlSerializer(大约 10%)。

      您可以将 DataContractSerializer 与应用于 ServiceContract/OperationContract 的 [XmlSerializerFormatAttribute] 一起使用。然后,您可以如下定义 DataContract,

      [DataContract(Name="Add")]
      public class Addition 
      {     
          private string _num1;     
          private string _num2;     
          private string _num3;     
      
          [DataMember(Name="FirstNumber",Order=1), XmlAttribute]     
          public string num1     
          {         
              set { _num1 = value; }         
              get { return _num1; }     
          }     
      
          [DataMember(Name="SecondNumber",Order=2), XmlAttribute]     
          public string num2     
          {         set { _num2 = value; }         
                get { return _num2; }     
          }     
      
          [DataMember(Name = "Result",Order=3), XmlAttribute]     
          public string num3     
          {         
              set { _num3 = value; }         
              get { return _num3; }     
          } 
      } 
      

      请注意,执行上述操作会失去 DataContractSerializer 的性能优势。

      HTH, 阿米特·巴蒂亚

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多