如何在C#中解析json密钥和数组

时间:2015-07-30 12:41:04

标签: c# arrays json

我想在C#中解析这样的json数据。

Json : 
   {
    Key1 : 5,
    Key2 : 6,
    Array : [
         {Id : 5} , 
         {Id : 6} , 
         {Id : 7} ,
         ...
    ]
    }

C#代码:

var dict = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(jsonData);
var key1 = dict["Key1"];
var key2 = dict["Key2"];
var array = dict["Array"];

// array type is object { System.Collections.ArrayList }

使用此代码我可以获取key1和key2值,但我无法获取Array值。 我该如何解析数组值?

3 个答案:

答案 0 :(得分:0)

使用此方法解析json字符串

public static T Deserialize<T>(string json)
{
    using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
        return (T)serializer.ReadObject(ms);
    } 
}

答案 1 :(得分:0)

如果是我,我会使用JSON.NET将JSON反序列化为JObject。然后,您可以遍历JSON对象模型,这比将其强制转换为字典更容易。

等效的解析代码如下所示:

 var json = JObject.Parse(jsonData)
 JValue the_id_of_the_first_item_in_the_array_named_Array = ((JValue)json["Array"][0]["Id"]);
 object the_underlying_value = the_id_of_the_first_item_in_the_array_named_Array.Value;

在.NET Fiddle运行它:https://dotnetfiddle.net/mbmane

答案 2 :(得分:0)

使用dynamic关键字可以使您的代码更具可读性。

dynamic obj = JsonConvert.DeserializeObject(json);

int key1 = obj.Key1;
int key2 = obj.Key2;
foreach(var item in obj.Array)
{
    int id = item.Id;
    Console.WriteLine(id);
}

PS:需要Json.Net