我遇到的问题是DataContract Serializer没有按照所需的顺序呈现数据成员或属性。我有一个数据合同装饰类,它继承自另一个数据合同装饰类,例如它是父项的子项,并指定特定属性的排序顺序。
我不确定是否需要使用特殊配置设置或如何实现此功能,即使它需要自定义排序例程。
基本上,当序列化输出时,我希望“ParentResource”中的某些属性出现在“ChildResource”的某些属性之前。
序列化表示中的理想属性排序: - ParentProperty1 - ParentProperty2 - ChildProperty1 - ChildProperty2
序列化表示中的当前属性排序: - ChildProperty1 - ChildProperty2 - ParentProperty1 - ParentProperty2
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; }
}
}
答案 0 :(得分:1)
你想要的是DataMember.Order
。
public class ChildResource : ParentResource
{
[DataMember(EmitDefaultValue = false, Order = 2)]
public int ChildProperty1 { get; set; }
[DataMember(EmitDefaultValue = false, Order = 3)]
public int ChildProperty2 { get; set; }
}