在C#中parsingJsonstring

我正在尝试阅读C#中的Jsonstring,但是我很难搞清楚如何将stringparsing为C#。 说我有以下JSONstring

[ { "AppName": { "Description": "Lorem ipsum dolor sit amet", "Value": "1" }, "AnotherAppName": { "Description": "consectetur adipisicing elit", "Value": "String" }, "ThirdAppName": { "Description": "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", "Value": "Text" }, "Application": { "Description": "Ut enim ad minim veniam", "Value": "100" }, "LastAppName": { "Description": "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "Value": "ZZZ" } } ] 

我想parsing成arraylist或字典,使用格式如

 descriptionList["AppName"] = "Lorem ipsum dolor sit amet"; valueList["AppName"] = "1"; 

我一直在和Json.Net一起玩,但是我看到的例子并没有给我一个清晰的想法,我该怎么做。 什么是达到这个目的的最好方法? 不能这样做,就像在jQuery,使用foreach语句?

我在我的项目中使用Json.net,它很好。 在你的情况下,你可以这样做来parsing你的json:

编辑:我改变了代码,所以它支持读取你的json文件(数组)

代码parsing:

 void Main() { var json = System.IO.File.ReadAllText(@"d:\test.json"); var objects = JArray.Parse(json); // parse as array foreach(JObject root in objects) { foreach(KeyValuePair<String, JToken> app in root) { var appName = app.Key; var description = (String)app.Value["Description"]; var value = (String)app.Value["Value"]; Console.WriteLine(appName); Console.WriteLine(description); Console.WriteLine(value); Console.WriteLine("\n"); } } } 

输出:

 AppName Lorem ipsum dolor sit amet 1 AnotherAppName consectetur adipisicing elit String ThirdAppName sed do eiusmod tempor incididunt ut labore et dolore magna aliqua Text Application Ut enim ad minim veniam 100 LastAppName quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat ZZZ 

顺便说一句,你可以使用LinqPad来testing你的代码,比在Visual Studio中创build一个解决scheme或项目更容易。

你可以尝试使用System.Web.Script.Serialization.JavaScriptSerializer

 var json = new JavaScriptSerializer(); var data = json.Deserialize<Dictionary<string, Dictionary<string, string>>[]>(jsonStr); 
 json: [{"ew":"vehicles","hws":["car","van","bike","plane","bus"]},{"ew":"countries","hws":["America","India","France","Japan","South Africa"]}] 

C#代码:只取一个值,例如单词“bike”。

 //res=[{"ew":"vehicles","hws":["car","van","bike","plane","bus"]},{"ew":"countries","hws":["America","India","France","Japan","South Africa"]}] dynamic stuff1 = Newtonsoft.Json.JsonConvert.DeserializeObject(res); string Text = stuff1[0].hws[2]; Console.WriteLine(Text); 

输出:

 bike 

而不是arraylist或字典,你也可以使用dynamic。 大多数情况下,我使用EasyHttp来做这件事,但是肯定会有其他项目做同样的事情。 下面是一个例子:

 var http = new HttpClient(); http.Request.Accept = HttpContentTypes.ApplicationJson; var response = http.Get("url"); var body = response.DynamicBody; Console.WriteLine("Name {0}", body.AppName.Description); Console.WriteLine("Name {0}", body.AppName.Value); 

在NuGet上: EasyHttp

你试图反序列化到一个字典实际上是一个JavaScript对象序列化为JSON。 在Javascript中,您可以将此对象用作关联数组,但就JSON标准而言,它实际上是一个对象。

所以你将没有任何问题反序列化你有一个标准的JSON序列化程序(如.net的,DataContractJsonSerializer和JavascriptSerializer)到一个对象(成员名为AppName,AnotherAppName等),但实际上将其解释为一个字典,我需要一个比Json规范更进一步的序列化程序,就我所知,它没有关于字典的任何内容。

一个这样的例子是每个人都使用的: JSON .net

如果你不想使用一个外部库,也就是在将它的JavaScript对象序列化为JSON之前将其转换为一个列表,那么还有另一个解决scheme。

 var myList = []; $.each(myObj, function(key, value) { myList.push({Key:key, Value:value}) }); 

现在,如果将myList序列化为JSON对象,则应该能够使用上述任何序列化器反序列化为List<KeyValuePair<string, ValueDescription>> 。 那么这个列表就会很明显地转换成字典。

注意:ValueDescription是这个类:

 public class ValueDescription { public string Description { get; set; } public string Value { get; set; } }