我有以下内容:
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()
?
编辑:我现在应该补充说我正在创建一个只能完成此任务的属性,即
[JsonProperty]
public virtual int GetHashCodeJson { get { return GetHashCode(); }
答案 0 :(得分:0)
对于JSON.Net而言,这与一般的.net序列化并不是一个问题。
您需要按属性序列化对象,并且要求序列化方法的返回值。所以没有办法用你想要的语法来做到这一点。
你能做到这一点:
Data = myClass.GetHashCode()
仅表示方法(int)的返回值可以序列化,而不是序列化程序完全关心该值的来源。
如果你考虑一下,说一个值是方法的序列化返回值没有多大意义,因为你如何反序列化呢?您永远无法将值写回方法,因为它仅返回值,而不是像{get; set;}的属性那样的双向关系。