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(来更新现有对象的属性)。你知道怎么做吗?我可以使用反射将值从一个对象复制到另一个对象,我只是不确定使用填充是否会更快。。。