2012-02-07 4 views
1

DataContractシリアライザがデータメンバまたはプロパティを必要な順序でレンダリングしないという問題が発生しています。私は、他のデータコントラクトのクラスを継承したデータコントラクト飾りクラスを持っています。それは親の子であり、特定のプロパティのソート順を指定します。継承されたオブジェクトまたはサブクラス化されたオブジェクトを持つDataContractシリアライザでデータメンバのプロパティを注文する方法はありますか?

カスタムソートルーチンが必要な場合でも、私が利用する必要のある特別な構成設定があるかどうか、またはこれを達成する方法がわかりません。

基本的には、出力がシリアル化されるときに、「ChildResource」のいくつかのプロパティの前に「ParentResource」の特定のプロパティが表示されます。

直列化表現の理想的なプロパティの注文: - 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

お望みのものは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; } 
} 
関連する問題