2

如果我有这样的对象:

[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 关键字。我究竟做错了什么?

谢谢

4

1 回答 1

1

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; }
于 2012-12-12T22:24:26.023 回答