本文介绍了递归反序列化JSON对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个递归JSON对象这样表示查询表达式:
I have a recursive JSON object like this representing a query expression:
{ "where": { "operator": "AND", "left": { "operator": "=", "$fieldRef": "requestor", "value": "@me" }, "right": { "operator": "=", "$fieldRef": "state", "value": "Closed" } } }更多的对象可以出现在JSON层次为好。这里是一个更复杂的例子:
More objects can appear in the JSON hierarchy as well. Here is a more complex example:
{ "where": { "operator": "OR", "left": { "operator": "=", "$fieldRef": "id", "value": "1234" }, "right": { "operator": "OR", "left": { "operator": "=", "$fieldRef": "orgId", "value": "6757" }, "right": { "operator": "AND", "left": { "operator": "STARTSWITH", "$fieldRef": "firstname", "value": "D" }, "right": { "operator": "=", "$fieldRef": "state", "value": "Closed" } } } } }我想能够为这个JSON反序列化到一些类,更新数据,然后后来序列化回JSON。我怎样才能做到这一点使用Json.NET?
I would like to be able to deserialize this JSON into some classes, update the data and then later serialize back to JSON. How can I do this using Json.NET?
推荐答案这样定义类:
class Query { [JsonProperty("where")] public Clause Where { get; set; } } class Clause { [JsonProperty("operator")] public string Operator { get; set; } [JsonProperty("left")] public Clause Left { get; set; } [JsonProperty("right")] public Clause Right { get; set; } [JsonProperty("$fieldref")] public string FieldRef { get; set; } [JsonProperty("value")] public string Value { get; set; } }
然后就可以反序列化是这样的:
Then you can deserialize like this:
Query q = JsonConvert.DeserializeObject<Query>(json);您可以序列化回JSON是这样的:
You can serialize back to JSON like this:
JsonSerializerSettings settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented }; json = JsonConvert.SerializeObject(q, settings);下面是一个简单的例子:的 dotnetfiddle/qqAj2v
Here is a simple demonstration: dotnetfiddle/qqAj2v
更多推荐
递归反序列化JSON对象
发布评论