如何根据序列化期间包含的类型信息来区分要包含的属性?

时间:2013-04-16 11:57:49

标签: serialization json.net

我遇到了一个问题,让我们用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序列化,因为SomeOtherProp使用Reference属性进行修饰,Height和{{ 1}}使用Weight属性进行修饰。

我已经研究过制作自定义ExcludeFromReference,但是在确定要包含或不包含的属性时似乎无法从中获取足够的上下文信息:单独的类型是不够的,因为我还需要有关的信息我访问该类型的属性。

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

0 个答案:

没有答案