如果我有这样的对象:

[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; }

07-24 09:38
查看更多