使用 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 属性填充现有对象。
是否存在使用具体类型作为模板将 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 属性填充现有对象。