我遇到了一个问题,让我们用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
和{{ 1}}使用Weight
属性进行修饰。我已经研究过制作自定义ExcludeFromReference
,但是在确定要包含或不包含的属性时似乎无法从中获取足够的上下文信息:单独的类型是不够的,因为我还需要有关的信息我访问该类型的属性。
我不是JSON.NET向导,所以我很可能错过了一些明显的东西......