c# - 具有自定义动态列的 JSON 字符串。在 C# 中追加

标签 c# json json.net

编写了以下代码

        var content = @ " {
          ""
          data "": {
            ""
            id "": 1000000,
            ""
            firstName "": ""
            John "",
            ""
            lastName "": ""
            Doe "",
            ""departments"": [2245],
            ""employeeGroups"": [],
            ""
            custom_186549 "": {
              ""
              name "": ""
              Pension_overenskomst "",
              ""
              type "": ""
              Boolean "",
              ""
              value "": false
            },
            ""
            custom_186550 "": {
              ""
              name "": ""
              Pension 1. arbejdsdag "",
              ""
              type "": ""
              Boolean "",
              ""
              value "": false
            }
          }
        }
        ";

        JObject names = JObject.Parse(content);

        IEnumerable < JToken > CustomColumnsFirst = names.SelectTokens("$.data");

        foreach(JToken item in CustomColumnsFirst) {
          Console.WriteLine(item);
        }

        IEnumerable < JToken > CustomColumnsNames = names.SelectTokens("$.data.*.name");
        IEnumerable < JToken > CustomColumnValues = names.SelectTokens("$.data.*.value");

我被困在这里,设法将名称和值放入 JToken“数组”中,但有点需要一种组合 CustomColumnNames 和 CustomColumnValues 的方法,然后还将它们附加回主数据上。 “风俗”的内容虽然不同,但风俗名称本身有所不同。不过,客户内部值的顺序也是随机的

我对 C# 编码还很陌生,所以还不了解很多基础知识。

我需要返回具有这种格式的 json 字符串,而无需输入“自定义”列名称,因为该名称可能会根据 API 返回的内容而有所不同:

{
   "data":{
      "id":1000000,
      "firstName":"John",
      "lastName":"Doe",
      "departments": [2245],
      "employeeGroups": []
      "Pension_overenskomst":false,
      "Pension 1. arbejdsdag":false
   }
}

最佳答案

试试这个

var data = ((JObject)JObject.Parse(content)["data"]);

JObject items = new JObject();
foreach (var item in data.Properties())
if ( item.Name.Contains("custom"))
//or, thanks to iSR5
 if ( item.Name.StartsWith("custom"))
        if (item.Name.StartsWith("custom"))
        {
          if ((string)item.Value["type"] == "Boolean")
                items.Add((string)item.Value["name"], item.Value["value"]);
            else if ((string)item.Value["type"] == "Text") items.Add("name", item.Value["value"]);
        }
else
        items.Add(item.Name, item.Value););


JObject newData = new JObject();
newData.Add("data", items);
content = newData.ToString();
//or
 content = newData.ToString(Newtonsoft.Json.Formatting.None);

新内容 json

{
  "data": {
    "id ": 1000000,
    "firstName ": "John",
    "lastName ": "Doe",
    "departments": [
      2245
    ],
    "employeeGroups": [],
    "Pension_overenskomst": false,
    "Pension 1.arbejdsdag": false,
    "name": "John Doe"
  }
}

关于c# - 具有自定义动态列的 JSON 字符串。在 C# 中追加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71362631/

相关文章:

c# - 有没有更短的写法 x == y OR x == z?

c# - 在 ListView 中显示/隐藏 Div

json - 如何计算主节点的投资返回率

c# - JSON.NET 错误检测到类型的自引用循环

c# - 当某些JSON对象为字符串而某些为数组时,如何将JSON转换为列表字符串?

c# - 使用 Json.Net 时,无法从字符串正确反序列化异常

c# - ADO.NET 数据服务在总体设计中的地位

c# - 在 If 语句中使用组合框中的选定项

json - 如何将 JSON 从文件加载到 SQL Server 2016 中?

javascript - 如何使用 ng-repeat 将 JSON 响应映射到 Html 页面