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