Как упорядочить элементы данных / свойства в сериализаторе DataContract с унаследованными или вложенными в подклассы объектами? - PullRequest
1 голос
/ 07 февраля 2012

У меня проблема с тем, что 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; }
}

}

1 Ответ

1 голос
/ 07 февраля 2012

То, что вы хотите, это 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; } 
}
...