在c#中反序列化JSON数组

时间:2015-02-27 07:42:18

标签: c# json

我开发了返回JSON字符串的服务。 返回字符串如下:

string result = [{"ID":"1","ProductName":"Canon"},{"ID":"2","ProductName":"HP"}];

现在我想反序列化JSON字符串。

我尝试过以下示例,但无法做到。为所有人带来错误。

Dictionary<string, string> data = JsonConvert.DeserializeObject<Dictionary<string, string>>(result);

Dictionary<string, Dictionary<string, string>> data = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(result);

string[][] data = JsonConvert.DeserializeObject<string[][]>(result);

var serialize = new JavaScriptSerializer();
string[] resultArray = serialize.Deserialize<string[]>(result);

任何人都可以帮帮我吗?

3 个答案:

答案 0 :(得分:2)

例如:

class Program
{
    static void Main(string[] args)
    {
        string json = @"[{""ID"":""1"",""ProductName"":""Canon""},{""ID"":""2"",""ProductName"":""HP""}]";
        IEnumerable<Product> result =  JsonConvert.DeserializeObject<IEnumerable<Product>>(json);
    }   
}

class Product
{
    public int ID { get; set; }
    public string ProductName { get; set; }
}

如果你想要一本字典:

IDictionary<int, string> dict = result.ToDictionary(product => product.ID, product => product.ProductName);

答案 1 :(得分:2)

有两种方法可以实现您想要的创建具体class来存储您的值

public class MyJsonValueClass
{
    [JsonProperty(PropertyName = "ID")]
    public int Productid { get; set; }

    [JsonProperty(PropertyName = "ProductName ")] 
    public string Name { get; set; }
}

List<MyJsonValueClass> jsonData = JsonConvert.DeserializeObject<List<MyJsonValueClass>>(json);

否则,如果您不想为其创建类,则使用List<Dictionary<string,string>>字典列表将获取数据。

List<Dictionary<string,string>> dataFromJson = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(json);

答案 2 :(得分:0)

创建一个表示每个元素的类:

public class TestClass
{
    public int ID { get; set; }

    public string ProductName { get; set; }
}

反序列化为TestClass[]

如果您需要这种格式,可以使用.ToDictionary():

Dictionary<int, string> lookup = deserializedArray.ToDictionary(k => k.Id, v => v.ProductName);