json在c#中的序列化和反序列化
本文关键字:序列化 反序列化 json | 更新日期: 2024-10-23 11:48:44
我创建了一个粗略的json数据示例。请公司为我提供所需的解决方案。
我现在想知道类的结构以及如何通过c#检索和制作这种格式的json。我有四个表tblcategory(包含所有类别)、tblcatmaping(包含类别映射)、tblitemmaping(包括项目和类别的映射)和tbrological(包含所有项目)
[
{
"CATID": "10001",
"CATNAME": "food",
"CATTYPE": "top",
"CATDESC": "contains different types of food",
"CATIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 11-41-29-food.jpg",
"CATSUBCAT": [
{
"CATID": "10002",
"CATNAME": "veg",
"CATTYPE": "sub",
"CATDESC": "contains different drinks",
"CATIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg",
"CATSUBCAT": [
{
"CATID": "10004",
"CATNAME": "nort-indian",
"CATTYPE": "sub",
"CATDESC": "contains different drinks",
"CATIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg",
"CATSUBCAT": [],
"CATITEM": [
{
"ITEMID": "20002",
"ITEMNAME": "dosa",
"ITEMTYPE": "item",
"ITEMDESC": "contains different dosa",
"ITEMIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg"
},
{
"ITEMID": "20003",
"ITEMNAME": "idli",
"ITEMTYPE": "item",
"ITEMDESC": "contains different idli",
"ITEMIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg"
}
]
},
{
"CATID": "10005",
"CATNAME": "south-indian",
"CATTYPE": "sub",
"CATDESC": "contains different drinks",
"CATIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg",
"CATSUBCAT": [],
"CATITEM": []
}
],
"CATITEM": []
},
{
"CATID": "10003",
"CATNAME": "non-veg",
"CATTYPE": "sub",
"CATDESC": "contains different drinks",
"CATIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg",
"CATSUBCAT": [
{
"CATID": "10004",
"CATNAME": "nort-indian",
"CATTYPE": "sub",
"CATDESC": "contains different drinks",
"CATIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg",
"CATSUBCAT": [],
"CATITEM": []
},
{
"CATID": "10005",
"CATNAME": "south-indian",
"CATTYPE": "sub",
"CATDESC": "contains different drinks",
"CATIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg",
"CATSUBCAT": [],
"CATITEM": []
}
],
"CATITEM": []
}
],
"CATITEM": []
},
{
"CATID": "10006",
"CATNAME": "beverages",
"CATTYPE": "top",
"CATDESC": "contains different drinks",
"CATIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg",
"CATSUBCAT": [
{
"CATID": "10007",
"CATNAME": "alcholic-drinks",
"CATTYPE": "top",
"CATDESC": "contains different drinks",
"CATIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg",
"CATSUBCAT": [],
"CATITEM": []
},
{
"CATID": "10008",
"CATNAME": "non-alcholic-drinks",
"CATTYPE": "top",
"CATDESC": "contains different drinks",
"CATIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg",
"CATSUBCAT": [],
"CATITEM": []
}
],
"CATTITEM": []
},
{
"CATID": "10009",
"CATNAME": "fast food",
"CATTYPE": "top",
"CATDESC": "contains various fast foods",
"CATIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-22-08-fastfood1.jpg",
"CATSUBCAT": [],
"CATITEM": [
{
"ITEMID": "20002",
"ITEMNAME": "dosa",
"ITEMTYPE": "item",
"ITEMDESC": "contains different dosa",
"ITEMIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg"
},
{
"ITEMID": "20003",
"ITEMNAME": "idli",
"ITEMTYPE": "item",
"ITEMDESC": "contains different idli",
"ITEMIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''09-09-2013 12-15-19-beverages.jpeg"
}
]
},
{
"CATID": "10015",
"CATNAME": "test",
"CATTYPE": "top",
"CATDESC": "contains test categories",
"CATIMGPATH": "Z:''TFS workspace''DineGenie - Dev''DineGenie - Dev''Filestore''category''19-09-2013 15-46-19-southindian2.png",
"CATSUBCAT": [],
"CATITEM": []
}
]
根据以下建议,我尝试使用http://json2csharp.com/>以下是:
类结构
public class RootObject
{
public string CATID { get; set; }
public string CATNAME { get; set; }
public string CATTYPE { get; set; }
public string CATDESC { get; set; }
public string CATIMGPATH { get; set; }
public List<object> CATSUBCAT { get; set; }
public List<object> CATITEM { get; set; }
public List<object> CATTITEM { get; set; }
}
但我不明白上面的对象是什么类型的
您可以根据自己的需求使用任何想要的工具,有些工具更适合您的项目。即使您更喜欢使用.NET Framework内置工具,如DataContractJsonSerializer。但是,如果你想让fif工作,你需要清理json对象的结构。
我在json对象中看到的主要问题是嵌套数组。而不是像。。。
{
...
"CATSUBCAT":
{
[
{
"CATID": "10002",
"CATNAME": "veg",
...
}
]
}
}
做这个。。。
{…
"CATSUBCAT":
[
{
"CATID": "10002",
"CATNAME": "veg",
...
}
]
}
请注意,json中的数组被声明为[],因此如果SUBCAT是一个对象数组,那么这个数组中的对象必须在[]内,并用逗号分隔。点击此链接,查看员工如何表示
您可以使用此网站http://json2csharp.com/为您创建类结构。我试过了,就像你说的那样,你的json中有错误。
编辑nr帮助修复Json:检查您的CATSUBCAT错误您没有打开和关闭它正确的
{
"CATID": "10001",
"CATNAME": "food",
"CATTYPE": "top",
"CATDESC": "contains different types of food",
"CATSUBCAT": [
{
"CATID": "10002",
"CATNAME": "veg",
"CATTYPE": "sub",
"CATDESC": "contains different drinks"
},
{
"CATID": "10002",
"CATNAME": "veg",
"CATTYPE": "sub",
"CATDESC": "contains different drinks"
}
]
}
编辑编号2:Newtonsoft.Json
比方说,你已经把所有Json加载到一个漂亮的字符串中。
string data = "{..... Json crap......}";
然后您所要做的就是使用它来为您解析json。
Newtonsoft.Json.Linq.JObject jObject = Newtonsoft.Json.Linq.JObject.Parse(data);
一旦它全部解析成jObject,你就可以从中读取
String CATID= jObject.SelectToken("CATID").ToSTring(); // will give you 10001
现在你的子类别是数组,所以这是一个Jarray
JArray dataCats = (JArray)jObject.SelectToken("CATSUBCATS");
然后你可以循环通过
foreach (JArray dataRow in dataRows)
{
String CATID= jObject.SelectToken("CATID").ToSTring(); // will give you 10001
}
希望能有所帮助。
根据您使用的Visual Studio版本,您可以尝试Edit -> Paste Special -> Paste JSON As Classes
。
有关示例,请参见此处。
对于序列化和反序列化,我强烈推荐使用JSON.NET。它具有比默认的.NET序列化程序多得多的功能。
如果你有类并使用JSON.NET,你可以反序列化你的字符串,如下所示:
MyClass[] instances = JsonConvert.DeserializeObject<MyClass[]>(jsonString);