我有一个带有构造函数的对象,它将所有属性设置为默认值,包括一些引用类型值:
class MySettings
{
public int Test1 { get; set; } // works well
public MyClass Test2 { get; set; } // stays at the default value
public MySettings()
{
this.Test1 = 123;
this.Test2 = new MyClass(1);
}
}
当我尝试反序列化一个对象时,引用类型属性(Test2
)保持在构造函数中设置的值,但value-type属性(Test1
)反序列化很好。 / p>
_jsonSerializationSettings =
new JsonSerializerSettings
{
Formatting = Formatting.Indented,
};
var result = JsonConvert.DeserializeObject<MySettings>(jsonString, _jsonSerializationSettings);
如果我在构造函数中评论Test2
属性的设置,它也会很好地反序列化。
我做错了什么?
答案 0 :(得分:0)
根据Newtonsoft的文档,
Json.NET
反序列化器使用ObjectCreationHandling.Auto
作为默认值,如果已经创建了它,则使用现有对象。
如果您想通过Json.NET
本身创建新对象,则应在ObjectCreationHandling.Replace
中使用JsonSerializerSettings
创建新对象,而不管是否已创建对象。
您可以在ObjectCreationHandling
中设置JsonSerializerSettings
设置,您可以在反序列化中使用该设置。
您的设置应为:
_jsonSerializationSettings =
new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ObjectCreationHandling = ObjectCreationHandling.Replace
};