将键值对反序列化为列表

时间:2018-05-21 14:38:34

标签: c# json json.net deserialization

有人可以告诉我如何将键值对反序列化到列表中吗?即从JSON响应中,我想从下面的响应中获取国家/地区列表和代码。我正在使用Newtonsoft.Json:

read.csv("https://www.cboe.com/publish/vxthdata/vxth_dailydata.xls")

4 个答案:

答案 0 :(得分:4)

如果使用以下定义创建类:

public class MyObject 
{
     public string status { get; set; }
     public string message { get; set; }
     public MySubObject data { get; set; }
}

public class MySubObject 
{
    public string trade_origin_iso3country { get; set;}
    public Dictionary<string,string> countries { get;set;}
}

您可以使用最方便(至少是IMO)的语法来获取带有填充字典的对象。

var myResult = JsonConvert.Deserialize<MyObject>(json);

获取清单:

var result = (
     from kvp in myResult.data.countries
     select $"{kvp.Key}: {kvp.Value}").ToList()

答案 1 :(得分:1)

您可以使用JObject.Parse将json解析为JObject,然后访问内部属性并将其转换为Dictionary<string, string>

var countries = JObject.Parse(json)["data"]["countries"].ToObject<Dictionary<string, string>>();
foreach (var kv in countries)
{
    Console.WriteLine($"Key[{kv.Key}] Value[{kv.Value}]");
}

将输出:

Key[ARM] Value[Armenia]
... etc.

答案 2 :(得分:0)

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

foreach(var kv in data)
{
Console.WriteLine(kv.Key + ":" + kv.Value);
}

试试这个

答案 3 :(得分:0)

如果可能,我推荐自定义类型。这是一个控制台应用程序,您可以复制和粘贴,使用您提供的信息向您显示我所指的内容。 它使用众所周知且强烈推荐的Newtonsoft.Json nuget包。

<强>代码:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace Question_Answer_Console_App
{
    public class Program
    {
        public const string JsonResultString = @"{
                                                     ""status"": ""SUCCESS"",
                                                     ""message"": ""something"",
                                                     ""data"": {
                                                         ""trade_origin_iso3country"": ""GBR"",
                                                         ""countries"": {
                                                             ""ARM"": ""Armenia"",
                                                             ""BLR"": ""Belarus "",
                                                             ""DNK"": ""Denmark"",
                                                             ""GBR"": ""United Kingdom"",
                                                             ""MCO"": ""Monaco""
                                                         }
                                                     }
                                                 }";
        [STAThread]
        static void Main(string[] args)
        {
            var jsonResult = JsonConvert.DeserializeObject<JsonResult>(JsonResultString);

            foreach (var keyValue in jsonResult.Data.Countries)
                Console.WriteLine($"{keyValue.Key} : {keyValue.Value}");

            Console.Read();
        }
    }

    public class JsonResult
    {
        public string Status { get; set; }
        public string Message { get; set; }
        public JsonData Data { get; set; }
    }

    public class JsonData
    {
        [JsonProperty("trade_origin_iso3country")]
        public string TradeOriginIso3country { get; set; }
        public Dictionary<string, string> Countries { get; set; }
    }
}

<强>输出:

ARM : Armenia
BLR : Belarus
DNK : Denmark
GBR : United Kingdom
MCO : Monaco