C# JsonConvert.PopulateObject不使用JsonConverter类属性
尝试使用C# JsonConvert.PopulateObject不使用JsonConverter类属性,c#,json.net,deserialization,C#,Json.net,Deserialization,尝试使用JsonConvert.PopulateObject更新类属性时,不会调用JsonPathConverter,因此不会进行填充 示例类: [JsonConverter(typeof(JsonPathConverter))] public class SampleClass { int id; [JsonProperty("sample.id")] public int Id { get { retur
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
而不是JsonConvert.PopulateObject
,则将按预期调用转换器:
var sampleClass = JsonConvert.DeserializeObject<SampleClass>(str);
var-sampleClass=JsonConvert.DeserializeObject(str);
Fiddle:是的,我注意到只有在使用反序列化对象时才调用它。但我确实需要使用populate(来更新现有对象的属性)。你知道怎么做吗?我可以使用反射将值从一个对象复制到另一个对象,我只是不确定使用填充是否会更快。。。