尝试使用JsonConvert.PopulateObject
更新类属性时,不会调用JsonPathConverter
,因此不会填充。
示例类:
[JsonConverter(typeof(JsonPathConverter))]
public class SampleClass
{
int id;
[JsonProperty("sample.id")]
public int Id
{
get
{
return id;
}
set
{
id = value;
}
}
}
致电PopulateObject
:
var sampleClass = new SampleClass() {
Id = 1
};
var str = "{sample:{id:2}}";
JsonConvert.PopulateObject(str, sampleClass, new JsonSerializerSettings());
但Id
属性永远不会设置为2。
我已尝试使用JsonSerializerSettings
converter = new JsonPathConverter()
,但它也无效。
知道它为什么不起作用?
答案 0 :(得分:0)
注意:我假设您在问题中引用的JsonPathConverter
是this answer中的{。}}。
ReadJson
仅在实例化由转换器处理的对象时才在JsonConverter
上调用。由于PopulateObject
适用于已经实例化的对象,因此ReadJson
不会调用转换器的PopulateObject
方法。这是设计的。如果您使用JsonConvert.DeserializeObject<T>
而不是JsonConvert.PopulateObject
,则会按预期调用转换器:
var sampleClass = JsonConvert.DeserializeObject<SampleClass>(str);