c# - 使用 WCF 托管的 xml 序列化对象,如何在对象上使用 XmlSerializer 时更改 xml 节点的顺序

标签 c# .net xml-serialization

如果我有这样一个对象:

[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 Serializer 将遵守该订单值。

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

关于c# - 使用 WCF 托管的 xml 序列化对象,如何在对象上使用 XmlSerializer 时更改 xml 节点的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13849705/

相关文章:

c# - 使用 Newtonsoft Json.NET 解析多维 JSON 数组

.net - 如何从powershell构建VS解决方案文件夹

c# - XML序列化、编码

c# - 如何将此 XML 定义转换为 C# 类

c# - Compact Framework - 将依赖项 (dll) 放在子文件夹中

c# - WPF FrameworkElement 父级和移动 UIElement

c# - 如何以编程方式验证程序集是否使用特定证书签名?

c# - handle 有什么用?指针

c# - 编写 XML 文件?

c# - 如何将事件触发器添加到业务对象的数据模板?