C# 使用c语言反序列化复杂的JSON对象#
我知道如何反序列化基本Json对象。我对嵌套对象有问题;例如,下面是我想要反序列化的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"
{
"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说的,这不是我在这个例子中想要的,但是谢谢你!