递归反序列化JSON对象 [英] Deserialize recursive JSON object

查看:217
本文介绍了递归反序列化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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆