c# - JSON反序列化器继承泛型类型

标签 c# json generics serialization json.net

我在将一些 JSON 字符串反序列化为 C# 对象时遇到问题。

假设我有以下代码:

public class A
{
    public string Name { get; set; }
}

public class B : A
{
    public int Age { get; set; }
}

public class C
{
    public ObservableCollection<A> As
    {
        get;
        set;
    }
}

我序列化了以下对象_c:

C _c = new C();
_c.As.Add(new B() { Name = "Max", Age = 4 });

这非常有效。

但是我无法反序列化创建的 JSON 字符串并创建 B 的实例,因为 ObservableCollection 是用 A 声明为泛型类型的。有没有办法告诉 Newtonsoft.Json 使用 B 而不是 A

非常感谢。

最佳答案

似乎您已经解决了这个问题,但您可以通过更改类 C 约束来实现相同的效果,而无需使用任何自定义 JSON 转换器。见下文:

public class C<T> where T : A
{
    private ObservableCollection<T> _as = new ObservableCollection<T>();

    public ObservableCollection<T> As
    {
        get { return _as; }
        set { _as = value; }
    }
}

然后像这样进行反/序列化

var _c = new C<B>();
_c.As.Add(new B() { Name = "Max", Age = 4 });

var serialized = JsonConvert.SerializeObject(_c);
var deserialized = JsonConvert.DeserializeObject<C<B>>(serialized); // B

关于c# - JSON反序列化器继承泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32694466/

相关文章:

Java - 为什么不允许 Enum<E> 作为 Annotation 成员?

java - 比较泛型类型 Java

c# - VB.NET 必须实现错误

c# - 为什么我的 SplitView 的内容和 Pane 在同一区域?

php - MySQL 表未在 UPDATE 查询上更新(来自 Facebook 图形调用)

javascript - 删除 JSON 根

Java:通过修改作为参数传递的对象来使数据结构无效

C#在linux中执行终端命令

c# - 如何在 ASP.NET Web Api 中配置 gzip 压缩响应?

javascript - 将数组和其他变量一起转换成 JSON