递归反序列化JSON对象 [英] Deserialize recursive JSON object
本文介绍了递归反序列化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);
下面是一个简单的例子:的 https://dotnetfiddle.net/qqAj2v
Here is a simple demonstration: https://dotnetfiddle.net/qqAj2v
这篇关于递归反序列化JSON对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文