gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:57 24 4
gpt4 key购买 nike

我在将一些 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com