使用具体类型作为模板,Json.net是否存在将json字符串反序列化为匿名对象(仅具有json属性)的方法?
为例
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)。
答案 0 :(得分:3)
var point = new { X = 0.0f, Z = 0.0f };
var jsonResponse =
JsonConvert.DeserializeAnonymousType(json, point);
答案 1 :(得分:1)
否,除非您使用代码生成,否则无法执行此操作。匿名类型是在编译时定义的,而您说在获得JSON之前不知道您想要匿名类型的属性(在运行时 )。
如果您只是想要检测JSON中是否存在哪些属性,则可以将其反序列化为accurev promote -c "Move changes from DEV to QA stream" -I <issueNumber> -3
,然后对其进行处理以找出更改的内容。或者,您可以向模型添加状态字典,然后使用JObject
反序列化。有关这些想法的示例,请参阅Is there a way in Json.NET serialization to distinguish between "null because not present" and "null because null"?。
答案 2 :(得分:1)
serializer.Populate
是我正在寻找的方法......
它不会生成匿名对象,但会使用现有的json属性填充现有对象。