C# 使用c语言反序列化复杂的JSON对象#

C# 使用c语言反序列化复杂的JSON对象#,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,我知道如何反序列化基本Json对象。我对嵌套对象有问题;例如,下面是我想要反序列化的json示例 { "data": { "A": { "id": 24, "key": "key", "name": "name", "title": "title" }, "B": { "id": 37, "key"

我知道如何反序列化基本Json对象。我对嵌套对象有问题;例如,下面是我想要反序列化的json示例

{
    "data": {
        "A": {
            "id": 24,
            "key": "key",
            "name": "name",
            "title": "title"
        },
        "B": {
            "id": 37,
            "key": "key",
            "name": "name",
            "title": "title"
        },
        "C": {
            "id": 18,
            "key": "key",
            "name": "name",
            "title": "title"
        },
        "D": {
            "id": 110,
            "key": "key",
            "name": "name",
            "title": "title"
        }
      },
    "type": "type",
    "version": "1.0.0"
}
现在,
“数据”
的对象数未知,可能是100个,也可能是1000个,也可能只有1个,而且所有对象都有不同的名称。我的最终目标是获取数据中每个对象的信息

我尝试了基本json,但根本不起作用

不管怎样,这就是我尝试过的

我制作了一个叫做数据的类

public class data
{
    public long id { get; set; }
    public string key { get; set; }
    public string name { get; set; }
    public string title { get; set; }
}
然后我做了另一个类,叫做test

public class test
{
    /*
    I have also tried this, which works but then I don't know what to do with it and how to deserialize the information of it.
    //public Newtonsoft.Json.Linq.JContainer data { get; set; }
    */
    public List<List<data>> data { get; set; }
    public string type { get; set; }
    public string version { get; set; }
}
公共类测试
{
/*
我也尝试过这个方法,但我不知道该如何处理它以及如何反序列化它的信息。
//public Newtonsoft.Json.Linq.JContainer数据{get;set;}
*/
公共列表数据{get;set;}
公共字符串类型{get;set;}
公共字符串版本{get;set;}
}
在我的驱动程序应用程序中,我做到了这一点

 string downloadedData = w.DownloadString(link);
 test t = JsonConvert.DeserializeObject<test>(downloadedData);
string downloaddedata=w.DownloadString(链接);
test t=JsonConvert.DeserializeObject(下载数据);
但这并没有像我预期的那样奏效。
任何帮助都将不胜感激。

您正在寻找一本字典

将其用作类定义:

public class Rootobject
    {
        public Dictionary<string, DataObject> data { get; set; }
        public string type { get; set; }
        public string version { get; set; }
    }
    public class DataObject
    {
        public int id { get; set; }
        public string key { get; set; }
        public string name { get; set; }
        public string title { get; set; }
    }
公共类根对象
{
公共字典数据{get;set;}
公共字符串类型{get;set;}
公共字符串版本{get;set;}
}
公共类数据对象
{
公共int id{get;set;}
公共字符串密钥{get;set;}
公共字符串名称{get;set;}
公共字符串标题{get;set;}
}
这证明了读取对象是有效的:

var vals = @"{

""data"": {
    ""A"": {
        ""id"": 24,
        ""key"": ""key"",
        ""name"": ""name"",
        ""title"": ""title""
    },
    ""B"": {
        ""id"": 37,
        ""key"": ""key"",
        ""name"": ""name"",
        ""title"": ""title""
    },
    ""C"": {
        ""id"": 18,
        ""key"": ""key"",
        ""name"": ""name"",
        ""title"": ""title""
    },
    ""D"": {
        ""id"": 110,
        ""key"": ""key"",
        ""name"": ""name"",
        ""title"": ""title""
    }
  },
""type"": ""type"",
""version"": ""1.0.0""
}";
var obj = JsonConvert.DeserializeObject<Rootobject>(vals);
var-vals=@”{
“数据”:{
“A”:{
“id”:24,
“键”:“键”,
“名称”:“名称”,
“标题”:“标题”
},
“B”:{
“id”:37,
“键”:“键”,
“名称”:“名称”,
“标题”:“标题”
},
“C”:{
“id”:18,
“键”:“键”,
“名称”:“名称”,
“标题”:“标题”
},
“D”:{
“id”:110,
“键”:“键”,
“名称”:“名称”,
“标题”:“标题”
}
},
“”类型“”:“”类型“”,
“版本”:“1.0.0”
}";
var obj=JsonConvert.DeserializeObject(VAL);

您正在寻找字典

将其用作类定义:

public class Rootobject
    {
        public Dictionary<string, DataObject> data { get; set; }
        public string type { get; set; }
        public string version { get; set; }
    }
    public class DataObject
    {
        public int id { get; set; }
        public string key { get; set; }
        public string name { get; set; }
        public string title { get; set; }
    }
公共类根对象
{
公共字典数据{get;set;}
公共字符串类型{get;set;}
公共字符串版本{get;set;}
}
公共类数据对象
{
公共int id{get;set;}
公共字符串密钥{get;set;}
公共字符串名称{get;set;}
公共字符串标题{get;set;}
}
这证明了读取对象是有效的:

var vals = @"{

""data"": {
    ""A"": {
        ""id"": 24,
        ""key"": ""key"",
        ""name"": ""name"",
        ""title"": ""title""
    },
    ""B"": {
        ""id"": 37,
        ""key"": ""key"",
        ""name"": ""name"",
        ""title"": ""title""
    },
    ""C"": {
        ""id"": 18,
        ""key"": ""key"",
        ""name"": ""name"",
        ""title"": ""title""
    },
    ""D"": {
        ""id"": 110,
        ""key"": ""key"",
        ""name"": ""name"",
        ""title"": ""title""
    }
  },
""type"": ""type"",
""version"": ""1.0.0""
}";
var obj = JsonConvert.DeserializeObject<Rootobject>(vals);
var-vals=@”{
“数据”:{
“A”:{
“id”:24,
“键”:“键”,
“名称”:“名称”,
“标题”:“标题”
},
“B”:{
“id”:37,
“键”:“键”,
“名称”:“名称”,
“标题”:“标题”
},
“C”:{
“id”:18,
“键”:“键”,
“名称”:“名称”,
“标题”:“标题”
},
“D”:{
“id”:110,
“键”:“键”,
“名称”:“名称”,
“标题”:“标题”
}
},
“”类型“”:“”类型“”,
“版本”:“1.0.0”
}";
var obj=JsonConvert.DeserializeObject(VAL);

在测试类中,如何处理公共字典数据。您可以从VisualStudio中的JSON代码生成JSON类,而不是列表。选择JSON代码,将其复制到剪贴板,然后转到
EDIT->PASTE SPECIAL->JSON to class
。然后您可以使用生成的类进行反序列化。@Michael,虽然这是一个很好的提示,但对本例不起作用。@SamMarion谢谢!我用字典找到了它。@Michael谢谢你的提示,我也看了一下,它很棒,但就像SamMarion说的,这不是我在这个例子中想要的,但是谢谢你!在测试类中,如何处理公共字典数据。您可以从VisualStudio中的JSON代码生成JSON类,而不是列表。选择JSON代码,将其复制到剪贴板,然后转到
EDIT->PASTE SPECIAL->JSON to class
。然后您可以使用生成的类进行反序列化。@Michael,虽然这是一个很好的提示,但对本例不起作用。@SamMarion谢谢!我用字典找到了它。@Michael谢谢你的提示,我也看了一下,它很棒,但就像SamMarion说的,这不是我在这个例子中想要的,但是谢谢你!