繁体   English   中英

将 json(具有多个级别)转换为列表 c#

[英]Convert a json (with many levels) into a List c#

我有一个 JSON 里面有很多级别,如下所示

{
    "value": [
        {
            "CityId": 100
            "Colleges": {
                "CollegeName": "ABC",
                "Departments": [
                    {
                        "DepartmentId": 1001,
                        "DepartmentInfo": {
                            "Name": "ComputerScience",
                            "StudentsCount": 60,
                            "HOD": "John"
                        }
                    },
                    {
                        "DepartmentId": 1002,
                        "DepartmentInfo": {
                            "Name": "Humanties",
                            "StudentsCount": 120,
                            "HOD": "Ravi"
                        }
                    }
                ]
            }
        },
        {
            "CityId": 100
            "Colleges": {
                "CollegeName": "DEF",
                "Departments": [
                    {
                        "DepartmentId": 2001,
                        "DepartmentInfo": {
                            "Name": "ComputerScience",
                            "StudentsCount": 60,
                            "HOD": "James"
                        }
                    },
                    {
                        "DepartmentId": 2002,
                        "DepartmentInfo": {
                            "Name": "Humanties",
                            "StudentsCount": 120,
                            "HOD": "Donald"
                        }
                    }
                ]
            }
        }
    ]
}

我已经获取了 CollegeInfo、DepartmentId、Name、StudentsCount、HOD 等信息。 所以我用这些属性创建了 class。

现在从下面的代码中,我可以获取 Dictionary<string, object> 中的所有信息。 这里的 Key 是 JSON 内属性的路径。

private static void FillDictionaryFromJToken(Dictionary<string, object> dict, JToken token, string path = "")
        {
            switch (token.Type)
            {
                case JTokenType.Object:
                    foreach (JProperty prop in token.Children<JProperty>())
                    {
                        FillDictionaryFromJToken(dict, prop.Value, prop.Path);
                    }
                    break;

                case JTokenType.Array:
                    foreach (JToken value in token.Children())
                    {
                        FillDictionaryFromJToken(dict, value);
                    }
                    break;

                default:
                    dict.Add(path, ((JValue)token).Value);
                    break;
            }
        }

现在第一组的所有属性都是单独的记录,第二组也是如此。 路径将像这样 [0].Colleges.Departments[0].DepartmentId、Colleges.Departments[0].DepartmentInfo.Name 等。但我想将 class 中的这些信息作为单个记录填写,其中的所有属性该记录与第二组相同。

有什么帮助吗??

您可以尝试使用 package Newtonsoft.Json,并使用代码:

YourClassWithTheProperties instance = 
    JsonConvert.Deserialize<YourClassWithTheProperties>(jsonString);

这样做您将拥有一个 class 并且您可以在属性中使用 foreach。

如何转换列表<object>至 Json | C#<div id="text_translate"><p> 我有一个由对象组成的列表,每个 object 有 5 个数据。 我需要将该列表转换为 json,但使用序列化它会填满空的 json。</p><p> 有谁知道我可能做错了什么?</p><pre> foreach (DataRow dtRow in dtAlarmas.Rows) { String Name = dtRow["Name"].ToString(); String ID = dtRow["ID"].ToString(); String AlarmText = dtRow["AlarmText"].ToString(); String AlarmTimeNoNula = dtRow["AlarmTimeNoNula"].ToString(); lstAlarmasNoTratadas.Add(new Ondoan.DatosAux.Alarmas.AlarmaNoTratadaModel(dtRow["Name"].ToString(), Convert.ToInt32(dtRow["ID"]), dtRow["Class"].ToString(), dtRow["AlarmText"].ToString(), dtRow["AlarmTimeNoNula"].ToString())); } string sParams = JsonConvert.SerializeObject(lstAlarmasNoTratadas);</pre><p> 转换后的 sParams 值 = "[{}]"</p><p> Class Ondoan.DatosAux.Alarmas.AlarmaNoTratadaModel</p><pre> using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Ondoan.DatosAux.Alarmas { public class AlarmaNoTratadaModel { private string Name; private int ID; private string Class; private string AlarmText; private string AlarmaTimeNoNula; public AlarmaNoTratadaModel(string Name, int ID, string Class, string AlarmText, string AlarmaTimeNoNula) { // TODO: Complete member initialization this.Name = Name; this.ID = ID; this.Class = Class; this.AlarmText = AlarmText; this.AlarmaTimeNoNula = AlarmaTimeNoNula; } public class AlarmaNoTratadasModel { public AlarmaNoTratadasModel() { } public AlarmaNoTratadasModel(String Name, Nullable&lt;System.Int32&gt; ID, String Class, String AlarmText, String AlarmaTimeNoNula) { this.Name = Name; this.ID = ID; this.Class = Class; this.AlarmText = AlarmText; this.AlarmaTimeNoNula = AlarmaTimeNoNula.ToString(); } public System.String Name { get; set; } public Nullable&lt;System.Int32&gt; ID { get; set; } public System.String Class { get; set; } public System.String AlarmText { get; set; } public System.String AlarmaTimeNoNula { get; set; } } } }</pre></div></object>

[英]How to Convert List<Object> to Json | C#

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 将 json 转换为 List&lt;&gt; C# 如何在 C# 中将列表转换为 JSON? 如何在C#中将JSON响应转换为列表? 在C#中将列表转换为json格式 如何将JSON数组转换为C#列表? 将 Json 字符串转换为 C# Object 列表 如何将json转换为列表c# 将json转换为c#对象列表 在C#中将层级字符串列表转换为JSON 如何转换列表<object>至 Json | C#<div id="text_translate"><p> 我有一个由对象组成的列表,每个 object 有 5 个数据。 我需要将该列表转换为 json,但使用序列化它会填满空的 json。</p><p> 有谁知道我可能做错了什么?</p><pre> foreach (DataRow dtRow in dtAlarmas.Rows) { String Name = dtRow["Name"].ToString(); String ID = dtRow["ID"].ToString(); String AlarmText = dtRow["AlarmText"].ToString(); String AlarmTimeNoNula = dtRow["AlarmTimeNoNula"].ToString(); lstAlarmasNoTratadas.Add(new Ondoan.DatosAux.Alarmas.AlarmaNoTratadaModel(dtRow["Name"].ToString(), Convert.ToInt32(dtRow["ID"]), dtRow["Class"].ToString(), dtRow["AlarmText"].ToString(), dtRow["AlarmTimeNoNula"].ToString())); } string sParams = JsonConvert.SerializeObject(lstAlarmasNoTratadas);</pre><p> 转换后的 sParams 值 = "[{}]"</p><p> Class Ondoan.DatosAux.Alarmas.AlarmaNoTratadaModel</p><pre> using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Ondoan.DatosAux.Alarmas { public class AlarmaNoTratadaModel { private string Name; private int ID; private string Class; private string AlarmText; private string AlarmaTimeNoNula; public AlarmaNoTratadaModel(string Name, int ID, string Class, string AlarmText, string AlarmaTimeNoNula) { // TODO: Complete member initialization this.Name = Name; this.ID = ID; this.Class = Class; this.AlarmText = AlarmText; this.AlarmaTimeNoNula = AlarmaTimeNoNula; } public class AlarmaNoTratadasModel { public AlarmaNoTratadasModel() { } public AlarmaNoTratadasModel(String Name, Nullable&lt;System.Int32&gt; ID, String Class, String AlarmText, String AlarmaTimeNoNula) { this.Name = Name; this.ID = ID; this.Class = Class; this.AlarmText = AlarmText; this.AlarmaTimeNoNula = AlarmaTimeNoNula.ToString(); } public System.String Name { get; set; } public Nullable&lt;System.Int32&gt; ID { get; set; } public System.String Class { get; set; } public System.String AlarmText { get; set; } public System.String AlarmaTimeNoNula { get; set; } } } }</pre></div></object>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM