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

时间:2017-08-22 02:05:27

标签: c# json.net deserialization json-deserialization

使用具体类型作为模板,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)。

3 个答案:

答案 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属性填充现有对象。