我有以下内容:
public class MyClass : SuperClass {
[JsonProperty]
public virtual string Id { get; set; }
}
public abstract class SuperClass {
public int GetHashCode() {
//do things here
}
}
我不能改变 SuperClass
。当我使用 JsonNet 序列化为 Json 时,我会做这样的事情:
JsonSerializerSettings serializer = new JsonSerializerSettings {
//serializer settings
};
var jsonNetResult = new JsonNetResult {
Data = myClass,
SerializerSettings = serializer
};
return jsonNetResult;
显然它不会序列化GetHashCode()
。如果我去:
var jsonNetResult = new JsonNetResult {
Data = myClass.GetHashCode(),
SerializerSettings = serializer
};
它将正确序列化该值,是否有一些序列化程序设置可以用来告诉它包含 GetHashCode()
?
编辑:我应该补充一点,我现在正在创建一个只有 get 才能完成的属性,即
[JsonProperty]
public virtual int GetHashCodeJson { get { return GetHashCode(); }
最佳答案
与一般的 .net 序列化相比,这不是 JSON.Net 的问题。
您需要按对象的属性序列化对象,并且您要求序列化方法的返回值。所以没有办法用你想要的语法来做到这一点。
你能做到这一点:
Data = myClass.GetHashCode()
仅表示方法的返回值(一个 int)可以被序列化,而不是序列化程序根本不关心该值来自哪个方法。
如果你仔细想想,说一个值是一个方法的序列化返回值并没有多大意义,因为你如何反序列化它呢?您永远无法将值写回方法,因为它只是一个返回值,而不是像带有 {get;set;} 的属性那样的双向关系。
关于c# - 使用 JSON.NET,如何序列化这些继承的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3833678/