首页 > 解决方案 > 如何基于@para-id将数据绑定到JSON文件

问题描述

在我的项目客户端中,将这个 JSON 字符串发送给我。

{
  "onlineRequest": {
    "CustomerCode": "AB432A",
    "MobileNumber": "75484568",
    "ProductNo": "100",
    "JsonFile": {
      "evaluation": {
        "number": [
          {
            "@para-id": "5656",
            "@new-code": "",
            "@text": "Hello America"
          },
          {
            "@para-id": "3302",
            "@new-code": "100",
            "@text": "Hello Japan"
          }
        ]
      }
    }
  }
}

此 JSON 包含名为JsonFile. 现在我需要将值设置为此 JSON 文件,如下所示。

if @para-id = 5656, then @new-code = "0000" if @para-id = 3302, then @new-code = "1111"

预期输出:

{
  "onlineRequest": {
    "CustomerCode": "AB432A",
    "MobileNumber": "75484568",
    "ProductNo": "100",
    "JsonFile": {
      "evaluation": {
        "number": [
          {
            "@para-id": "5656",
            "@new-code": "0000",
            "@text": "Hello America"
          },
          {
            "@para-id": "3302",
            "@new-code": "1111",
            "@text": "Hello Japan"
          }
        ]
      }
    }
  }
}

我怎样才能做到这一点?

标签: c#jsondata-bindingparameter-passing

解决方案


可以通过以下方式轻松完成Newtonsoft.Json

var source = @"{
  ""onlineRequest"": {
    ""CustomerCode"": ""AB432A"",
    ""MobileNumber"": ""75484568"",
    ""ProductNo"": ""100"",
    ""JsonFile"": {
      ""evaluation"": {
        ""number"": [
          {
            ""@para-id"": ""5656"",
            ""@new-code"": """",
            ""@text"": ""Hello America""
          },
          {
            ""@para-id"": ""3302"",
            ""@new-code"": ""100"",
            ""@text"": ""Hello Japan""
          }
        ]
      }
    }
  }
}";
var json = JToken.Parse(source);
var dict = new Dictionary<string, string>
{
    ["5656"] = "0000",
    ["3302"] = "1000",
};

foreach (var number in json.SelectToken("onlineRequest.JsonFile.evaluation.number").ToArray())
{
    var id = (string)number["@para-id"];
    if (id != null && dict.TryGetValue(id, out var code))
    {
        number["@new-code"] = code;
    }
}

推荐阅读