c# - XML 序列化 : is Order mandatory on your class when you specifiy at least 1 Order attribute?

标签 c# .net xml serialization

使用下面的类:

[Serializable]
public class OrderedClass
{
    private int field1;
    private string field2;
    private string field3;

    [XmlElement(Order = 30)]
    public string Field3
    {
        get { return field3; }
        set { field3 = value; }
    }

    public int Field1
    {
        get { return field1; }
        set { field1 = value; }
    }

    [XmlElement(Order = 20)]
    public string Field2
    {
        get { return field2; }
        set { field2 = value; }
    }

    public OrderedClass()
    {
        field1 = 1;
        field2 = "String1";
        field3 = "String2";
    }
}`

这会序列化而不在 public int Field1 上设置顺序吗? 我认为这会在幕后将其顺序设置为 0,但我在尝试序列化时遇到反射错误 XmlSerializer orderedSerializer = 新的 XmlSerializer(typeof(OrderedClass));

最佳答案

我设法弄明白了,区别确实在于 XmlElement 顺序和 DataMember 顺序之间。在 XmlEments 上定义订单时,您需要所有 XmlElements 都有一个订单。

在 DataMembers 上定义顺序时,以下规则适用:

  • 如果数据协定类型是继承层次结构的一部分,则其基类型的数据成员始终排在第一位。

  • 下一个顺序是当前类型的数据成员,它们没有设置 DataMemberAttribute 属性的 Order 属性,按字母顺序排列。

  • 接下来是具有 DataMemberAttribute 属性集的 Order 属性的任何数据成员。如果某个 Order 值有多个成员,则它们首先按 Order 属性的值排序,然后按字母顺序排列。可以跳过订单值。

来源:http://msdn.microsoft.com/en-us/library/ms729813.aspx

关于c# - XML 序列化 : is Order mandatory on your class when you specifiy at least 1 Order attribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16830805/

相关文章:

c# - 使用 protobuf.net 反序列化时出现 ArgumentException {token}

c# - 如何在 ModelView 中防止 WPF 枚举

c# - Sprite 位置比视口(viewport)移动得更快

.net - 如何通过代理/防火墙添加网络引用?

android - 创建一个xml文件?

c# - 如何从自定义 SQL "AdminUsers"表中为管理员保护 MVC4 区域

c# - 服务已经存在(当它显然不存在时)

c# - 如何将内部文本插入空的 xml 元素?

c# - 使用 OpenXml 插入 SQL

.net - 找不到来自源的事件 ID 的说明