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シリアル化する必要があります。は属性で装飾されており、は属性で装飾されているため、シリアル化する必要はありません。HeightWeightSomeOtherPropReferenceHeightWeightExcludeFromReference
カスタムの作成を検討しましたContractResolverが、どのプロパティを含めるかどうかを決定する際に十分なコンテキスト情報を取得できないようです: タイプにアクセスするプロパティに関する情報も必要なので、タイプだけでは十分ではありません.
私は JSON.NET のウィザードではないので、明らかな何かを見落としている可能性があります...