gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 09:24:03 26 4
gpt4 key购买 nike

使用下面的类:

[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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com