我正在尝试解析以下 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,但我只是替换了你的 RatesObj
用Dictionary<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 个字符串条目(货币名称)和小数点(汇率)。希望这就是您要找的。p>
希望对您有所帮助。如果您还有其他问题,请告诉我,我会详细说明我的答案。
祝你好运!
关于c# - 在 C# 中解析 JSON 键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9003244/