尝试使用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。
我已经尝试使用converter = new JsonPathConverter()
的JsonSerializerSettings
,但它也不起作用。
知道为什么它不起作用吗?
注意:我假设您在问题中指的是JsonPathConverter
是此答案中的一个。
ReadJson
仅在JsonConverter
上调用,当时是时候实例化由转换器处理的对象。由于PopulateObject
在已经实例化的对象上工作,因此PopulateObject
不会调用转换器的ReadJson
方法。这是设计。如果您使用JsonConvert.DeserializeObject<T>
而不是JsonConvert.PopulateObject
,则将按预期调用转换器:
var sampleClass = JsonConvert.DeserializeObject<SampleClass>(str);
小提琴:https://dotnetfiddle.net/lxiirm