WCF:SOAP输出正文包含标记名称而不是元素

时间:2009-12-18 15:39:38

标签: c# xml wcf soap

我有一个使用xsd.exe工具创建的对象,该工具在代码中定义了xml属性,但是来自我的Web服务的SOAP响应正在返回xmlelements而不是属性。

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class Accountinfo {

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string UpdatedDate;

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string UpdatedBy;

... etc

如您所见,UpdatedDate等被定义为属性。 当我调用我的服务时,我回来的肥皂体会返回Accountinfo元素:

  

<a:Accountinfo> <a:UpdatedBy>IGD</a:UpdatedBy> <a:UpdatedDate>12/18/2009 9:43:06 AM</a:UpdatedDate>       ......等等。

我正在寻找的是<AccountInfo UpdatedBy="IGD" UpdatedDate="12/18/2009 9:43:06 AM" ... />

我没有很多XML,SOAP或WCF的经验,但我现在正在使用这三个,需要让它工作。我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

您的WCF SOAP Web服务是否使用标准WCF DataContractSerializer?如果是这样 - 这是预期的行为。

为了提高10%以上的速度,DataContractSerializer(默认情况下在WCF中使用,除非您明确要求XmlSerializer)放弃XML属性并将所有内容序列化为元素。

即使在数据上拥有所有这些[XmlAttribute]属性也没有区别 - 在创建代理客户端时(使用svcutil.exe或Visual Studio“添加服务),您需要专门请求XmlSerializer引用“对话框”,或者在服务实现上指定[XmlSerializerFormat]属性。

阅读有关XmlSerializerFormat attribute的更多信息,并参阅Dan Rigsby对WCF DataContractSerializer vs. XmlSerializer

的出色比较