我有一个相关的问题,我们称之为使用 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
。
我已经考虑制作一个 custom ContractResolver
,但在确定要包含或不包含哪些属性时似乎无法从中获得足够的上下文信息:仅类型是不够的,因为我还需要有关访问该类型的属性的信息.
我不是 JSON.NET 向导,所以我很可能错过了一些明显的东西......