【问题标题】:Convert Json to explicit new object, List initialization c#将 Json 转换为显式新对象,列表初始化 c#
【发布时间】:2020-04-23 20:04:05
【问题描述】:

您好,我想知道是否有办法将 json 对象转换为显式的新对象/列表对象,例如:

转换这个:

{
 "name":"John",
 "age":30,
 "cars":[ "Ford", "BMW", "Fiat" ]
}

进入这个 c# 代码文本:

new className() {
  Name = "John",
  Age = 30,
  Cars = new List (){"Ford", "BMW", "Fiat" }
 };

我想要做的是在 c# 代码中创建相当于 json 代码的代码。

【问题讨论】:

标签: c# json


【解决方案1】:

您可以使用 Newtonsoft 库中的 JObject

这是图书馆的一个例子

string json = @"{
  CPU: 'Intel',
  Drives: [
    'DVD read/writer',
    '500 gigabyte hard drive'
  ]
}";

JObject o = JObject.Parse(json);


Console.WriteLine(o.ToString());

输出

{
   "CPU": "Intel",
   "Drives": [
     "DVD read/writer",
     "500 gigabyte hard drive"
   ]
}

或者你可以使用jsonutils创建一个C#等价类

然后使用Newtonsoft解析Json对象

MyObject obj = JsonConvert.DeserializeObject<MyObject>(jsonContent);

【讨论】:

    【解决方案2】:

    您可以使用https://www.jsonutils.com/等在线服务

    function Convert(jsonStr, classNr) {
      var i = classNr == undefined ? 0 : classNr;
      var str = "";
      var json = JSON.parse(jsonStr);
      for (var prop in json) {
        if (typeof(json[prop]) === "number") {
          if (json[prop] === +json[prop] && json[prop] !== (json[prop] | 0)) {
            str += prop + " = " + json[prop] + "M, ";
          } else {
            str += prop + " = " + json[prop] + ", ";
          }
        } else if (typeof(json[prop]) === "boolean") {
          str += prop + " = " + json[prop] + ", ";
        } else if (typeof(json[prop]) === "string") {
          str += prop + ' = "' + json[prop] + '", ';
        } else if (json[prop] == null || json[prop] == undefined) {
          str += prop + ' = null, ';
        } else if (typeof(json[prop]) === "object") {
          str += prop + " = " + Convert(JSON.stringify(json[prop]), i++) + ", ";
        }
      }
    
      if (str.endsWith(', ')) {
        str = str.substring(0, str.length - 2);
      }
    
      return "new Class" + i + "{ " + str + " }";
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <textarea id="tin" cols="100" rows="6">
     {"A":12}
    </textarea>
    <input type="button" value="Just do it!" onclick="$('#result').text(Convert($('#tin').val()));" />
    <div id="result"></div>

    来自https://stackoverflow.com/a/34590681/1932159

    【讨论】:

    • 感谢您的回答,这是一个很棒的工具,但我不想只创建具有其属性的类,我想要的是使用 json 的内容创建这些类的初始化。
    • 查看答案,我添加了新的解决方案@DanielMoralesArias
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    相关资源
    最近更新 更多