如果我有这样的对象:
[XmlRoot("Person")]
public class Person
{
[XmlElement("LastName")]
public string Last {get;set;}
[XmlElement("FirstName")]
public string First {get;set;}
[XmlElement("Banners")]
public List<Banner> Banners {get;set;}
}
[XmlType("Banner")]
public class Banner
{
[XmlElement("Title")]
public string Title {get;set;}
[XmlElement("Location")]
public string Location {get;set;}
}
在本地序列化时,看起来还可以
<Person>
<LastName/>
<FirstName/>
<Banners>
<Banner>
<Title/>
<Location/>
</Banner>
</Banners>
</Person>
但是,如果创建一个库并从WCF IIS服务中托管它,而我想从客户端应用程序中使用它,则在访问Person对象时,请用我的参数填充它,然后将其序列化为xml字符串,我得到以下信息:
<Person>
<Banners>
<Banner>
<Location/>
<Title/>
</Banner>
</Banners>
<FirstName/>
<LastName/>
</Person>
在根之后的每个级别,所有节点均按字母顺序显示。我已经尝试在XmlElement属性中使用Order关键字,但是它看起来并不明显。
现在,如果我在本地使用该对象并对其进行序列化,则该对象将遵循Order关键字。我究竟做错了什么?
谢谢
最佳答案
XmlSerializer是强制性的吗?
WCF默认情况下使用DataContractSerializer。
因此,我将切换到该位置。
该属性是DataMember
-而不是XmlElement
。
使用DataMember,您可以添加订单值,DataContract序列化程序将遵守该订单值。
[DataMember(Order = 0)]
public string FirstName { get; set; }
[DataMember(Order = 1)]
public string LastName { get; set; }
[DataMember(Order = 2)]
public string Email { get; set; }
[DataMember(Order = 3)]
public string Password { get; set; }