【发布时间】:2019-08-22 20:09:22
【问题描述】:
我在使用 Json.Net 将 JSON 字符串反序列化为泛型类型时遇到了一些问题。
我遇到的问题是泛型类的属性被正确反序列化,在这种情况下,下面的SomeStrings 属性将按预期填充,但Data 属性保留null。
我希望有人能阐明我缺少什么,因为序列化相同类型的工作正常。
请看下面的类结构:
public class Foo
{
public List<string> SomeStrings { get; protected set; } = new List<string>();
protected Foo()
{
}
}
public class GenericFoo<TBar> : Foo
{
public TBar Data { get; private set; }
private GenericFoo() {}
public GenericFoo(TBar data)
{
Data = data;
}
public GenericFoo(TBar data, params string[] someStrings) :this(data)
{
SomeStrings = someStrings.ToList();
}
}
public class DataClass
{
public int Id { get; set; }
}
我正在运行的代码:
var settings = new JsonSerializerSettings()
{
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
};
var response = new GenericFoo<DataClass>(new DataClass()
{
Id = 10
}, "Test");
//serialises completely fine
var json = JsonConvert.SerializeObject(response, settings);
//Produces JSON: {"Data":{"Id":10},"SomeStrings":["Test"]}
//all properties deserialised fine, Data left null
var obj = JsonConvert.DeserializeObject<GenericFoo<DataClass>>(json, settings);
【问题讨论】:
-
你的课堂上没有无参数构造器吗?试着把
private变成一个public -
@VidmantasBlazevicius - 在序列化器设置中使用
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor允许私有无参数构造函数。 -
@cmpbedes 检查我的provided answer