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

标签 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()

编辑:我应该补充一点,我现在正在创建一个只有 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/

相关文章:

elasticsearch - 修改 Nest 和 Elastic Search 的序列化器设置

c# - 强制 Json.net 反序列化中的构造函数参数值

c# - 使用 Json.NET : "Unexpected token: StartObject" 进行解析

c# - 单元测试适配器抛出异常 : Object must implement IConvertible. .in BDD specflow 框架

c# - Pinvoke 调用总是返回 -1

c# - 为什么绑定(bind)到按钮的命令与绑定(bind)到菜单项的命令具有不同的行为?

c# - 分层 JSON 数据到分层表

c# - 挣扎于起订量 - 在被测方法中使用起订量

c# - 让用户指定 RazorEngine 模板有多危险?

asp.net-mvc-4 - ASP.NET MVC 4.0 RC 和 Newsoft.Json