JsonConvert.PopulateObject 不使用 JsonConverter 类属性

VeY*_*roN 5 c# json.net deserialization

当尝试使用 更新类属性时,不会JsonConvert.PopulateObject调用JsonPathConverter,因此填充不会完成。

示例类:

[JsonConverter(typeof(JsonPathConverter))]
public class SampleClass
{
    int id;
    [JsonProperty("sample.id")]
    public int Id
    {
        get
        {
            return id;
        }
        set
        {
            id = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

拨电至PopulateObject

var sampleClass = new SampleClass() {
    Id  = 1
};

var str = "{sample:{id:2}}";
JsonConvert.PopulateObject(str, sampleClass, new JsonSerializerSettings());
Run Code Online (Sandbox Code Playgroud)

但该Id属性永远不会设置为 2。

我已经尝试JsonSerializerSettings过,converter = new JsonPathConverter()但它也不起作用。

知道为什么它不起作用吗?

Bri*_*ers 0

注意:我假设您在问题中提到的就是这个答案JsonPathConverter中的那个。

ReadJsonJsonConverter仅当需要实例化由转换器处理的对象时才调用 a 。由于适用于已PopulateObject实例化的对象,因此转换器的方法将不会被. 这是设计使然。如果您使用而不是,那么转换器将按预期被调用:ReadJsonPopulateObjectJsonConvert.DeserializeObject<T>JsonConvert.PopulateObject

var sampleClass = JsonConvert.DeserializeObject<SampleClass>(str);
Run Code Online (Sandbox Code Playgroud)

小提琴: https: //dotnetfiddle.net/lxiirm