关于c#:如何在具有继承或子类化对象的DataContract序列化程序中对数据成员的属性进行排序?

How to order data member's/properties in the DataContract serializer with inherited or subclassed objects?

我遇到一个问题,即DataContract序列化程序未按所需顺序呈现数据成员或属性。我有一个数据合同装饰类,该类继承自另一个数据合同装饰类,例如它是父项的子项,我指定特定属性的排序顺序。

我不确定是否需要使用特殊的配置设置或如何完成此设置,即使它需要自定义排序例程也是如此。

基本上,我希望输出序列化时," ParentResource "中的某些属性出现在" ChildResource "中的某些属性之前。

序列化表示形式中的理想属性排序:
-ParentProperty1
-ParentProperty2
-ChildProperty1
-ChildProperty2

当前属性在序列化表示中的顺序:
-ChildProperty1
-ChildProperty2
-ParentProperty1
-ParentProperty2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System.Runtime.Serialization;
namespace DataContractSerializationOrderingError
{
[DataContract]
[KnownType(typeof(ParentResource))]
public class ChildResource : ParentResource
{
    [DataMember(EmitDefaultValue = false)]
    public int ChildProperty1 { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public int ChildProperty2 { get; set; }
}

[DataContract]
public class ParentResource
{
    [DataMember(EmitDefaultValue = false, Order = 0)]
    public int ParentProperty1 { get; set; }

    [DataMember(EmitDefaultValue = false, Order = 1)]
    public int ParentProperty2 { get; set; }
}

} ??


您想要的是DataMember.Order

1
2
3
4
5
6
7
8
public class ChildResource : ParentResource
{
    [DataMember(EmitDefaultValue = false, Order = 2)]
    public int ChildProperty1 { get; set; }

    [DataMember(EmitDefaultValue = false, Order = 3)]
    public int ChildProperty2 { get; set; }
}