我有一个使用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的经验,但我现在正在使用这三个,需要让它工作。我在这里缺少什么?
答案 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
的出色比较