jsonconvert.populateObject不使用JSONCONVERTER类属性



尝试使用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

相关内容

  • 没有找到相关文章

最新更新