如何反序列化Json String并使用c#从对象获取密钥?

时间:2016-08-19 09:54:06

标签: c# json json.net

这是我的代码

""{\n  \"data\": [\n    {\n      \"listid\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}""

上面的字符串来自服务器。我想反序列化字符串并从对象数组中获取键。我尝试将JsonConvert.DeserializationDictionary一起使用,但它会引发异常。我还尝试了JObjectJArray。我想获得listId, name个密钥。

3 个答案:

答案 0 :(得分:3)

您是否尝试过反序列化为自己的类型?这对我有用:

    public class Program
{
    public static void Main(string[] args)
    {
        string deser = "{\n  \"data\": [\n    {\n      \"listid\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}";

        var obj = JsonConvert.DeserializeObject<MyCollection>(deser);


    }
}


public class MyType
{
    [JsonProperty("listid")]
    public string ListId { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }
}

public class MyCollection
{
    [JsonProperty("data")]
    public List<MyType> Data { get; set; }
}

答案 1 :(得分:1)

我得到了解决方案,以下代码正常

string json = "{\n  \"data\": [\n    {\n      \"listid\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}";
        var jss = new JavaScriptSerializer();
        List<string> li = new List<string>();
        dynamic jsondata = jss.Deserialize<dynamic>(json);
        foreach (string key in jsondata["data"][0].Keys)
        {
            li.Add(key);
        }

答案 2 :(得分:1)

您可以在C#中使用Newtonsoft.Json库

您需要使用与C#中json数组匹配的属性名创建相应的Classes,以便将json字符串反序列化为C#对象。

请参阅以下代码。

namespace StackOverflow.Test
{
    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.Linq;

    class Program
    {
        static void Main(string[] args)
        {
            var json = "{\n  \"data\": [\n    {\n      \"listid\": \"123\",\n      \"name\": \"Name\"\n    }\n  ]\n}";
            var lists = JsonConvert.DeserializeObject(json, typeof(Lists)) as Lists;
            var list = lists.Data.FirstOrDefault();

            Console.WriteLine("Name: " + list.Name);
            Console.WriteLine("List Id: " + list.ListId);

            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
    }

    class Lists
    {
        public List<Info> Data { get; set; }
    }

    class Info
    {
        public string ListId { get; set; }

        public string Name { get; set; }
    }
}