c# - 在 C# 中解析 JSON 键值对

标签 c# json datacontractjsonserializer

引用Parse JSON in C#

我正在尝试解析以下 JSON feed在 C# 中,我在访问“rates”中的数据时遇到问题。我试图将其反序列化为 List> 或 Dictionary 以及其他各种类型,但我总是得到 0 个结果。我设法让它工作的唯一方法是创建自定义类型并将我需要的所有货币作为属性 - 这非常好。

这是我当前的 DataContracts:

    [DataContract]
    public class OpenExchangeRatesResult
    {
        public OpenExchangeRatesResult() { }

        [DataMember]
        public string disclaimer { get; set; }

        [DataMember]
        public RatesObj rates { get; set; }

    }

    [DataContract]
    public class RatesObj
    {
        public RatesObj() { }
        [DataMember]
        public decimal EUR { get; set; }
        [DataMember]
        public decimal USD { get; set; }
        [DataMember]
        public decimal GBP { get; set; }
        [DataMember]
        public decimal AUD { get; set; }
        [DataMember]
        public decimal CAD { get; set; }
        [DataMember]
        public decimal CHF { get; set; }
        [DataMember]
        public decimal DKK { get; set; }
        [DataMember]
        public decimal LYD { get; set; }
        [DataMember]
        public decimal NZD { get; set; }
        [DataMember]
        public decimal SEK { get; set; }
        [DataMember]
        public decimal JPY { get; set; }
        [DataMember]
        public decimal ZAR { get; set; }
    }

我希望能够用某种集合替换 RatesObj。

有什么想法吗?

最佳答案

我正在使用 JSON.net (文档 here ),这可能类似于 DataContractJsonSerializer,但我只是替换了你的 RatesObjDictionary<string,decimal> :

[DataContract]
public class OpenExchangeRatesResult
{
    public OpenExchangeRatesResult() { }
    [DataMember]
    public string disclaimer { get; set; }
    [DataMember]
    public Dictionary<string, decimal> rates { get; set; }
}

还有我的测试代码:

class Program
{
    static void Main(string[] args)
    {
        HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(@"https://raw.github.com/currencybot/open-exchange-rates/master/latest.json");
        wr.Timeout = 30 * 1000;
        HttpWebResponse response = (HttpWebResponse)wr.GetResponse();
        using (var s = new StreamReader(response.GetResponseStream()))
        {
            string json = s.ReadToEnd();

            var oerr = JsonConvert.DeserializeObject<OpenExchangeRatesResult>(json);

            Console.WriteLine(json);
        }
    }
}

我最终得到的 rates 属性包含大约 150 个字符串条目(货币名称)和小数点(汇率)。希望这就是您要找的。

希望对您有所帮助。如果您还有其他问题,请告诉我,我会详细说明我的答案。

祝你好运!

关于c# - 在 C# 中解析 JSON 键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9003244/

相关文章:

c# - 在 Selenium 的 FirefoxOptions 中设置 BrowserExecutableLocation 并不能防止 "Unable to find a matching set of capabilities"错误

c# - 赛马日 - 先行 C#

c# - 总和除以 4 的数组数

c# - 服务器-客户端推/拉连接如何工作?

java - 检查 youtube-api 中视频对象中是否存在嵌套键以避免 NULLPOINTEREXCEPTION

c# - 正则表达式捕获文件名中的第一个/最后一个词

java - HashMap 上的 SimpleAdapter 无法正常工作

c# - 如何使用 DataContractSerializer 反序列化具有未命名类型集合的 JSON

c# - 如何使用 DataContractJsonSerializer 序列化匿名类型

c# - 从另一个应用程序域返回的对象可以在调用域中序列化吗?