使用 Json.net 进行部分反序列化

Partial deserialization with Json.net

是否存在使用具体类型作为模板将 json 字符串反序列化为匿名对象(仅具有 json 属性)的现有方法 Json.net?

例子

JSON:

{ X: 1, Z: 2 }

型号:

public class Point {
    public float X { get; set; }
    public float Y { get; set; }
    public float Z { get; set; }
}

所需的反序列化输出匿名对象:

new { X=1.0f, Z=1.0f } //Please note that X & Z are typed according to the Point class.

我想做类似的事情:

var @object = serializer.DeserializeAsAnonymous<Point>(json);

为什么?我想检测要在两侧使用反射更新模型的哪些属性(模型和提供的反序列化 json)。

var point = new { X = 0.0f, Z = 0.0f };
var jsonResponse = 
    JsonConvert.DeserializeAnonymousType(json, point);

没有,除非使用代码生成,否则没有办法做到这一点。匿名类型是在 编译时 定义的,而您是说在获得 JSON(在 运行次).

如果您只是想检测 JSON 中是否存在哪些属性,您可以反序列化为 JObject,然后对其进行处理以找出发生了什么变化。或者,您可以将状态字典添加到您的模型,然后使用 JsonConverter 反序列化到它。有关这些想法的示例,请参阅

serializer.Populate 是我一直在寻找的方法... 它不会生成匿名对象,但会使用现有 json 属性填充现有对象。