如何强制Json.Net序列化一个覆盖的字段,其中父类将其标记为[JsonIgnore]

时间:2014-04-18 19:38:53

标签: c# json inheritance serialization

我有一个类A,它定义了一个虚拟属性X,如下所示:

public virtual string X { get; set; }

扩展A的大多数类使用A X的定义,但类B会覆盖它并定义,因为它会计算它的值从另一个字段,它被标记为

[JsonIgnore]
public override string X { get { return this.Y+Z; } }

然而,第三类C扩展了B,但无法计算X,因此需要获取/设置并序列化字段

public override string X { get; set; }

问题在于,当我序列化C时,由于父类X上的[JsonIgnore]B被忽略。

如何让它在X上序列化C,但仍然不让它在B上序列化?

谢谢!

2 个答案:

答案 0 :(得分:0)

在编写我在解决方案中考虑的问题时,几乎没有使用override,而是使用new,因此它认为它是一个新属性,所以我最终定义X喜欢这个在C

public new string X { get; set; }

如果这不正确,请发回答:))

答案 1 :(得分:0)

尝试在类newX的实现上使用C关键字,而不是覆盖虚拟成员。这应该会阻止继承类B中的注释。

唯一的问题是它会破坏多态性:

A newObj = new C(); 
var b = newObj.X; //This calls the method in class A, not in C

其他选项是重新访问你的继承方案......例如,你能否让C直接从A继承?