有人可以告诉我如何将键值对反序列化到列表中吗?即从JSON响应中,我想从下面的响应中获取国家/地区列表和代码。我正在使用Newtonsoft.Json:
read.csv("https://www.cboe.com/publish/vxthdata/vxth_dailydata.xls")
答案 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