使用JSON.NET,如何序列化这些继承的成员?

时间:2010-09-30 18:31:52

标签: c# json.net

我有以下内容:

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(); }

1 个答案:

答案 0 :(得分:0)

对于JSON.Net而言,这与一般的.net序列化并不是一个问题。

您需要按属性序列化对象,并且要求序列化方法的返回值。所以没有办法用你想要的语法来做到这一点。

你能做到这一点:

Data = myClass.GetHashCode()

仅表示方法(int)的返回值可以序列化,而不是序列化程序完全关心该值的来源。

如果你考虑一下,说一个值是方法的序列化返回值没有多大意义,因为你如何反序列化呢?您永远无法将值写回方法,因为它仅返回值,而不是像{get; set;}的属性那样的双向关系。