我有一个类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
上序列化?
谢谢!
答案 0 :(得分:0)
在编写我在解决方案中考虑的问题时,几乎没有使用override
,而是使用new
,因此它认为它是一个新属性,所以我最终定义X
喜欢这个在C
public new string X { get; set; }
如果这不正确,请发回答:))
答案 1 :(得分:0)
尝试在类new
中X
的实现上使用C
关键字,而不是覆盖虚拟成员。这应该会阻止继承类B
中的注释。
唯一的问题是它会破坏多态性:
A newObj = new C();
var b = newObj.X; //This calls the method in class A, not in C
其他选项是重新访问你的继承方案......例如,你能否让C直接从A继承?