3

我有一个相关的问题,我们称之为使用 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序列化其属性。它不应该HeightWeight序列化,因为SomeOtherPropReference属性修饰,并且Height用属性Weight修饰ExcludeFromReference

我已经考虑制作一个 custom ContractResolver,但在确定要包含或不包含哪些属性时似乎无法从中获得足够的上下文信息:仅类型是不够的,因为我还需要有关访问该类型的属性的信息.

我不是 JSON.NET 向导,所以我很可能错过了一些明显的东西......

4

0 回答 0