JsonConvert.PopulateObject不使用JsonConverter类属性

时间:2016-11-28 23:35:29

标签: 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;
        }
    }
}

致电PopulateObject

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

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

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

我已尝试使用JsonSerializerSettings converter = new JsonPathConverter(),但它也无效。

知道它为什么不起作用?

1 个答案:

答案 0 :(得分:0)

注意:我假设您在问题中引用的JsonPathConverterthis answer中的{。}}。

ReadJson仅在实例化由转换器处理的对象时才在JsonConverter上调用。由于PopulateObject适用于已经实例化的对象,因此ReadJson不会调用转换器的PopulateObject方法。这是设计的。如果您使用JsonConvert.DeserializeObject<T>而不是JsonConvert.PopulateObject,则会按预期调用转换器:

var sampleClass = JsonConvert.DeserializeObject<SampleClass>(str);

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