【问题标题】:How to convert json key with an underscore to a new object in C#如何将带下划线的json键转换为C#中的新对象
【发布时间】:2020-05-10 11:22:34
【问题描述】:

如果我有一些像这样的 json..

{
  "name": "test",
  "dob": "20010101",
  "tel_home": "01785200200",
  "tel_work": "01785300300",
  "tel_mobile": "07123456789",
  . . .
}

如何将其转换为(只要显示下划线)

{
  "name": "test",
  "dob": "20010101",
  "tel": {
    "home": "01785200200",
    "work": "01785300300",
    "mobile": "07123412345"
    }
  . . .
}

属性可以更改,因此我无法反序列化为对象。 非常感谢您的帮助

-珍妮

【问题讨论】:

  • 您可以反序列化到 Newtonsoft 的JObject 并动态构建新的。

标签: c# json .net-core


【解决方案1】:

您可以将您的 JSON 解析为 JObject,保存所有属性,从 tel_ 值开始。然后将它们从原始JObject 中删除,创建一个具有更新属性名称的新对象,最后将创建的对象添加到原始对象中

var json = JObject.Parse(jsonString);

var properties = json.Properties()
    .Where(p => p.Name.StartsWith("tel_"))
    .ToList();
properties.ForEach(p => json.Remove(p.Name));

var newObject = new JObject(properties.Select(p => new JProperty(p.Name.Replace("tel_", string.Empty), p.Value)));
json.Add("tel", newObject);

Console.WriteLine(json);

它会给你以下结果

{
  "name": "test",
  "dob": "20010101",
  "tel": {
    "home": "01785200200",
    "work": "01785300300",
    "mobile": "07123456789"
  }
}

【讨论】:

    【解决方案2】:

    使用 Newtonsoft,您可以声明自定义序列化程序: https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonSerializer.htm

    这将允许您一次检查一个标记并将其放置在您想要的任何对象或变量中。

    【讨论】:

      猜你喜欢
      • 2016-10-01
      • 2021-02-06
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      相关资源
      最近更新 更多