使用 C# 更新 JObject 内的值

SP1*_*SP1 1 .net c# json json.net

我有下面的 JSON

{
    "mode": 1,
    "renderTo": 3,   
    "filterFields": [ 206 ],
    "filters": [
        {
            "_subscriptions": [],
            "RowState": 2,
            "fieldID": 206,
            "name": "Created Date",
            "value1": "01/01/2019",
            "value2": "01/03/2019",
            "preEdit": null,
            "postEdit": null
        }
    ],
    "priceCrossTabulation": 2,   
    "adHocFilterData": "",
    "displayTemplate": "runTemplate",
    "errors": [],
    "visibleErrors": []
}
Run Code Online (Sandbox Code Playgroud)

我想修改JSON对象中的这两个值

"value1": "01/01/2019",
"value2": "01/03/2019",
Run Code Online (Sandbox Code Playgroud)

我可以使用下面的代码获取该值

 var data1 = JObject.Parse(modifiedJsonString);
    var data2 =  data1.GetValue("filters").Values("value1").First();
    data2 = "06/02/2018";
Run Code Online (Sandbox Code Playgroud)

但不确定如何将其更新回 data1 对象。有人可以告诉我如何做吗?

谢谢

Anu*_*wan 6

您可以执行以下操作。

JObject root = JObject.Parse(json);
JArray item = (JArray)root["filters"];
item[0]["value1"] = "02/02/2019";  // new value
item[0]["value2"] = "02/02/2019";  // new value
Run Code Online (Sandbox Code Playgroud)

请注意filters是一个数组,需要通过索引访问。

输出

{
  "mode": 1,
  "renderTo": 3,
  "filterFields": [
    206
  ],
  "filters": [
    {
      "_subscriptions": [],
      "RowState": 2,
      "fieldID": 206,
      "name": "Created Date",
      "value1": "02/02/2019",
      "value2": "02/02/2019",
      "preEdit": null,
      "postEdit": null
    }
  ],
  "priceCrossTabulation": 2,
  "adHocFilterData": "",
  "displayTemplate": "runTemplate",
  "errors": [],
  "visibleErrors": []
}
Run Code Online (Sandbox Code Playgroud)