JSON.NETを使用した差分シリアライゼーションと呼びましょう。つまり、課題は、含まれている型のプロパティ宣言に応じて、型に対して異なるプロパティのセットをシリアル化する必要があるということです。
public class ChildAttribute : Attribute {}
public class ReferenceAttribute : Attribute { }
public class ExcludeFromReferenceAttribute : Attribute { }
[DataContract]
public class Lorum
{
[DataMember]
[Child]
public Ipsum SomeProp { get; private set; }
[DataMember]
[Reference]
public Dolor SomeOtherProp { get; set; }
}
[DataContract]
public class Ipsum
{
[DataMember]
public string Name { get; set; }
[ExcludeFromReference]
public int Age { get; set; }
}
[DataContract]
public class Dolor
{
[DataMember]
public string Name { get; set; }
[DataMember]
[ExcludeFromReference]
public int Width { get; set; }
[DataMember]
[ExcludeFromReference]
public int Height { get; set; }
}
json シリアライザーを実行すると、上記のコードに基づいて、次の結果が得られるルールセットを適用したいと考えています。
- のすべてのプロパティを
Lorum
含める必要があります。 - プロパティによって参照される
Ipsum
インスタンスSomeProp
は、属性で装飾されているため、すべてのプロパティをシリアル化する必要がありChild
ます。 Dolor
プロパティによって参照されるインスタンスは、そのプロパティSomeOtherProp
のみをName
シリアル化する必要があります。は属性で装飾されており、は属性で装飾されているため、シリアル化する必要はありません。Height
Weight
SomeOtherProp
Reference
Height
Weight
ExcludeFromReference
カスタムの作成を検討しましたContractResolver
が、どのプロパティを含めるかどうかを決定する際に十分なコンテキスト情報を取得できないようです: タイプにアクセスするプロパティに関する情報も必要なので、タイプだけでは十分ではありません.
私は JSON.NET のウィザードではないので、明らかな何かを見落としている可能性があります...