如何强迫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
上序列化?
谢谢!
在写这个问题的时候,我一直在思考解决方案,不是使用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继承吗?