如何强迫Json.Net来序列化一个被重写的字段,其中父类将其标记为[JsonIgnore]

本文关键字:父类 字段 JsonIgnore 记为 重写 序列化 Net Json 何强迫 一个 | 更新日期: 2023-09-27 17:59:07

我有一个类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,因此它需要一个get/set并序列化字段

public override string X { get; set; }

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

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

谢谢!

如何强迫Json.Net来序列化一个被重写的字段,其中父类将其标记为[JsonIgnore]

在写这个问题的时候,我一直在思考解决方案,不是使用override,而是使用new,这样它就认为它是一个新的属性,所以我最终在C 上这样定义了X

public new string X { get; set; }

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

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

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

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

其他选择是重新审视您的继承计划。。。例如,你能让C直接从A继承吗?