[英]How to convert Json to List in c# without dependant class
我需要将Json序列化为值列表,并且不希望有任何依赖类(意味着get,set),因为动态更改了Json密钥,并且在执行后还增加了数千个密钥(我有一个外部json文件)。
我搜索了很多链接,但无法解决问题,我只获得了转换后的字典类型。 示例json在下面,
{"ALC":"FSC","AVS":"7","CAB":"M","CL":"W","CNF":"N","CNX":"N","DES":"DEL","DTE":"3","EDT":"29 Jun 2017 09:20","FBAG":"15 Kg","FBC":"W2IPO","FCUR":null,"FN":"9W 822","FQT":true,"FRI":"FSC0","FYT":"160","ITN":"0","JYT":"160","MCL":"0","OFF":0,"OFI":false,"OFR":null,"ORG":"MAA","PC":"9W","RBD":null,"RFN":"False","RTK":"TAX:1801ASPLIT2901ASPLIT1101ASPLITADT1ASPLIT","SDT":"29 Jun 2017 06:40","SGD":"Aircraft Type : 738\u000d\u000aJourney Time : 160\u000d\u000aStart Terminal : 1\u000d\u000aEndTerminal : 3\u000d\u000aBaggage : 15 Kg","SGR":"","STE":"1","STP":"0","TNF":false,"VIA":"","VIAITN":null}
我在此问题上停留了一天,请任何人提供解决方案。我的代码如下。
var json = File.ReadAllText(Server.MapPath("JSON/Flight_res.txt"));
JToken rss = JObject.Parse(json);
var items= rss.SelectToken("FL").ToString();
var jss = new JavaScriptSerializer();
dynamic listofobj = jss.Deserialize<dynamic>(items.ToString());
JSON.net允许您按以下说明反序列化为匿名类型: http : //www.newtonsoft.com/json/help/html/DeserializeAnonymousType.htm
所以你可以用这种方式
string json = "{\"ALC\":\"FSC\",\"AVS\":\"7\",\"CAB\":\"M\",\"CL\":\"W\",\"CNF\":\"N\",\"CNX\":\"N\",\"DES\":\"DEL\",\"DTE\":\"3\",\"EDT\":\"29 Jun 2017 09:20\",\"FBAG\":\"15 Kg\",\"FBC\":\"W2IPO\",\"FCUR\":null,\"FN\":\"9W 822\",\"FQT\":true,\"FRI\":\"FSC0\",\"FYT\":\"160\",\"ITN\":\"0\",\"JYT\":\"160\",\"MCL\":\"0\",\"OFF\":0,\"OFI\":false,\"OFR\":null,\"ORG\":\"MAA\",\"PC\":\"9W\",\"RBD\":null,\"RFN\":\"False\",\"RTK\":\"TAX:1801ASPLIT2901ASPLIT1101ASPLITADT1ASPLIT\",\"SDT\":\"29 Jun 2017 06:40\",\"SGD\":\"Aircraft Type : 738\u000d\u000aJourney Time : 160\u000d\u000aStart Terminal : 1\u000d\u000aEndTerminal : 3\u000d\u000aBaggage : 15 Kg\",\"SGR\":\"\",\"STE\":\"1\",\"STP\":\"0\",\"TNF\":false,\"VIA\":\"\",\"VIAITN\":null}";
dynamic myData = JsonConvert.DeserializeAnonymousType(json, new ExpandoObject());
ExpandoObject实际上只是内部的一种特殊类型的字典,因此您可以通过这样迭代来提取数据;
foreach (var property in (IDictionary<string, string>)myData)
{
Console.WriteLine(property.Key + ": " + property.Value);
}
或者,如果您知道诸如以下代码中的“键”,则可以确切指定要提取的内容
string text = myData.ALC;
但是,因为ExpandoObject只是字典的一种,所以这与通过执行以下操作直接提取到字典没有什么不同;
Dictionary<string, Object> myDict = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
foreach (var property in (IDictionary<String, string>)myDict)
{
Console.WriteLine(property.Key + ": " + property.Value);
}
您可以将其转换为字典。
using Newtonsoft.Json;
string jsonString = "{\"ALC\":\"FSC\",\"AVS\":\"7\",\"CAB\":\"M\",\"CL\":\"W\",\"CNF\":\"N\",\"CNX\":\"N\",\"DES\":\"DEL\",\"DTE\":\"3\",\"EDT\":\"29 Jun 2017 09:20\",\"FBAG\":\"15 Kg\",\"FBC\":\"W2IPO\",\"FCUR\":null,\"FN\":\"9W 822\",\"FQT\":true,\"FRI\":\"FSC0\",\"FYT\":\"160\",\"ITN\":\"0\",\"JYT\":\"160\",\"MCL\":\"0\",\"OFF\":0,\"OFI\":false,\"OFR\":null,\"ORG\":\"MAA\",\"PC\":\"9W\",\"RBD\":null,\"RFN\":\"False\",\"RTK\":\"TAX:1801ASPLIT2901ASPLIT1101ASPLITADT1ASPLIT\",\"SDT\":\"29 Jun 2017 06:40\",\"SGD\":\"Aircraft Type : 738\u000d\u000aJourney Time : 160\u000d\u000aStart Terminal : 1\u000d\u000aEndTerminal : 3\u000d\u000aBaggage : 15 Kg\",\"SGR\":\"\",\"STE\":\"1\",\"STP\":\"0\",\"TNF\":false,\"VIA\":\"\",\"VIAITN\":null}";
Dictionary<string, string> dict = new Dictionary<string, string>();
dict = JsonConvert.DeserializeObject <Dictionary<string, string>>(jsonString);
var list = dict.ToList();
编辑
var json = File.ReadAllText("Demo.json");
Dictionary<string, string> dict = new Dictionary<string, string>();
dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
var list = dict.ToList();
这段代码工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.