如何正确地为 json 反序列化创建模型?
How correctly to create model for json deserialization?
如何将 JSON 反序列化为 C# 对象?
这是我的 JSON:
{
"date": "2020-07-02 10:39:00+00",
"base": "USD",
"rates": {
"FJD": 2.1692,
"MXN": 22.602,
[...]
}
}
根模型
public class BaseCurrencyModel
{
public DateTime Date { get; set; }
public string Base { get; set; }
public IEnumerable<RatesModel> Rates { get; set; }
}
数组值的对象:
public class RatesModel
{
public string currencyCode { get; set; }
public string rate { get; set; }
}
当我使用
public Dictionary<string, string> Rates
进入根模型一切正常。如果我使用
IEnumerable<RatesModel> Rates
我收到错误
Cannot deserialize the current JSON object into type 'System.Collections.Generic.IEnumerable`1[CurrencyConverter.Models.RatesModel]'because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array
json rates 不是数组,它是一个字典
public class BaseCurrencyModel
{
public DateTime Date { get; set; }
public string Base { get; set; }
public Dictionary<string,double> Rates { get; set; }
}
或者您可以将其转换为列表
var ratesParsed= JObject.Parse(json);
BaseCurrencyModel rates = new BaseCurrencyModel
{
Date = ratesParsed["date"].ToObject<DateTime>(),
Base = (string)ratesParsed["base"],
Rates = ((JObject)ratesParsed["rates"]).Properties().Select(x =>
new RatesModel { currencyCode = x.Name,
rate = Convert.ToDouble(x.Value) }
).ToList()
};
class
public class BaseCurrencyModel
{
public DateTime Date { get; set; }
public string Base { get; set; }
public List<Rate> Rates { get; set; }
}
输出(json格式)
{
"Date": "2020-07-02T08:09:00-02:30",
"Base": "USD",
"Rates": [
{
"currencyCode": "FJD",
"rate": 2.1692
},
{
"currencyCode": "MXN",
"rate": 22.602
}
]
}
如何将 JSON 反序列化为 C# 对象?
这是我的 JSON:
{
"date": "2020-07-02 10:39:00+00",
"base": "USD",
"rates": {
"FJD": 2.1692,
"MXN": 22.602,
[...]
}
}
根模型
public class BaseCurrencyModel
{
public DateTime Date { get; set; }
public string Base { get; set; }
public IEnumerable<RatesModel> Rates { get; set; }
}
数组值的对象:
public class RatesModel
{
public string currencyCode { get; set; }
public string rate { get; set; }
}
当我使用
public Dictionary<string, string> Rates
进入根模型一切正常。如果我使用
IEnumerable<RatesModel> Rates
我收到错误
Cannot deserialize the current JSON object into type 'System.Collections.Generic.IEnumerable`1[CurrencyConverter.Models.RatesModel]'because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array
json rates 不是数组,它是一个字典
public class BaseCurrencyModel
{
public DateTime Date { get; set; }
public string Base { get; set; }
public Dictionary<string,double> Rates { get; set; }
}
或者您可以将其转换为列表
var ratesParsed= JObject.Parse(json);
BaseCurrencyModel rates = new BaseCurrencyModel
{
Date = ratesParsed["date"].ToObject<DateTime>(),
Base = (string)ratesParsed["base"],
Rates = ((JObject)ratesParsed["rates"]).Properties().Select(x =>
new RatesModel { currencyCode = x.Name,
rate = Convert.ToDouble(x.Value) }
).ToList()
};
class
public class BaseCurrencyModel
{
public DateTime Date { get; set; }
public string Base { get; set; }
public List<Rate> Rates { get; set; }
}
输出(json格式)
{
"Date": "2020-07-02T08:09:00-02:30",
"Base": "USD",
"Rates": [
{
"currencyCode": "FJD",
"rate": 2.1692
},
{
"currencyCode": "MXN",
"rate": 22.602
}
]
}