C# 在某些继承属性上使用JsonIgnore
我有这样一个基类:C# 在某些继承属性上使用JsonIgnore,c#,serialization,json.net,jsonresult,C#,Serialization,Json.net,Jsonresult,我有这样一个基类: public class Baseclass { public string Id { get; set; } public string Type { get; set; } public string Name { get; set; } } …以及许多继承这些属性的类,例如: public class Thing: Baseclass { public string Size{ get; set; } public
public class Baseclass
{
public string Id { get; set; }
public string Type { get; set; }
public string Name { get; set; }
}
…以及许多继承这些属性的类,例如:
public class Thing: Baseclass
{
public string Size{ get; set; }
public string Color{ get; set; }
public string Smell{ get; set; }
}
现在,我不想序列化所有这些属性(mvc/jsonresult),所以我在我要排除的类的属性上使用[JsonIgnore],这很好。问题是我也不想序列化一个类的所有继承属性。我四处询问,得到了以下答案:
例:我不想在这个东西中序列化从基类继承的Id
我应该在基类virutal中设置Id:
public virtual string Id { get; set; }
并将以下内容添加到Thing类:
[JsonIgnore]
public override string Id { get; set; }
…但恐怕这行不通。我可以绕过它重建类层次结构。但我更喜欢一个更简单的解决方案。关于此解决方案不起作用的原因或排除某些继承属性的替代方案,您有什么建议吗?为什么不想序列化它?如果派生类不需要该属性,那么听起来它不应该在基类中。当我将[JsonIgnore]属性应用于它未序列化或反序列化的“Id”属性时,您可以尝试解决方法。我一定错过了什么:
var x=newthing(){Id=“1”,Type=“2”,Name=“3”,Size=“4”,Color=“5”,嗅觉=“6”};var y=JsonConvert.SerializeObject(x);var z=JsonConvert.DeserializeObject(y)代码>此处的一些建议:<代码>[JsonObject(MemberSerialization.OptIn)]
看起来是最简单的解决方案。事实上,这是重复的吗?谢谢你的回复!有些解决方案非常接近,但在与我的同事讨论之后,我们决定重写这些类,以避免冗余属性,从而减少混乱。