我目前在使用Json.NET反序列化一组名称键/值对时遇到一些麻烦
这是我正在尝试使用的Json的一个例子:
"prices":
{
"SharedMinPrice":{"USD":"0.00"},
"SharedAveragePrice":{"USD":"0.00"},
"PrivateMinPrice":{"USD":"8.82"},
"PrivateAveragePrice":{"USD":"26.85"},
"MinPrice":{"USD":"8.82"},
"AveragePrice":{"USD":"26.85"}}
}
如果我尝试将其反序列化为自定义类型的列表,则会出现以下错误:
无法反序列化当前的JSON对象(例如{“name”:“value”}) 进入类型'System.Collections.Generic.List`1 [APITypes.PropertyPrice]' 因为该类型需要一个JSON数组(例如[1,2,3])来反序列化 正确。
我在我的支持类中使用以下代码:
[JsonProperty("prices")]
public List<PropertyPrice> Prices { get; set; }
我的PropertyPrice类是:
internal class PropertyPrice
{
[JsonProperty("sharedMinPrice")]
public float sharedMinPrice { get; set; }
[JsonProperty("sharedAveragePrice")]
public float sharedAveragePrice { get; set; }
[JsonProperty("privateMinPrice")]
public float privateMinPrice { get; set; }
[JsonProperty("privateAveragePrice")]
public float privateAveragePrice { get; set; }
[JsonProperty("minPrice")]
public float minPrice { get; set; }
[JsonProperty("averagePrice")]
public float averagePrice { get; set; }
}
我做错了什么?
提前感谢您的任何帮助。
答案 0 :(得分:1)
由于它不是数组,因此您可以使用Dictionary<string,T>
。这段代码有用......
var obj = JsonConvert.DeserializeObject<Price>(json);
Console.WriteLine(obj.Prices["SharedMinPrice"]["USD"]);
...
public class Price
{
public Dictionary<string, Dictionary<string, decimal>> Prices { set; get; }
}
答案 1 :(得分:1)
您正尝试将{"USD": 3.50}
表单的JSON反序列化为float
。那些类型不匹配。下面我定义了一个新类型MoneyAmount
。
internal class MoneyAmount
{
public float USD { get; set; }
}
internal class PropertyPrice
{
[JsonProperty("sharedMinPrice")]
public MoneyAmount sharedMinPrice { get; set; }
[JsonProperty("sharedAveragePrice")]
public MoneyAmount sharedAveragePrice { get; set; }
[JsonProperty("privateMinPrice")]
public MoneyAmount privateMinPrice { get; set; }
[JsonProperty("privateAveragePrice")]
public MoneyAmount privateAveragePrice { get; set; }
[JsonProperty("minPrice")]
public MoneyAmount minPrice { get; set; }
[JsonProperty("averagePrice")]
public MoneyAmount averagePrice { get; set; }
}
或者,如果您想动态处理各种货币,可以使用Dictionary<string, float>
代替MoneyAmount
。
答案 2 :(得分:0)
忘记开头{开头
{“price”:{“SharedMinPrice”:{“USD”:“0.00”},“SharedAveragePrice”:{“USD”:“0.00”},“PrivateMinPrice”:{“USD”:“8.82”} “PrivateAveragePrice”:{ “USD”: “26.85”}, “MinPrice”:{ “USD”: “8.82”}, “AveragePrice”:{ “USD”: “26.85”}}}
- &GT;使用像http://jsonformatter.curiousconcept.com/这样的东西来测试你的json没有反序列化
此外,您不会将其作为数组传递:
{"employees": [{"id":"1"},{"id":"2"}]}
答案 3 :(得分:0)
你的json不是一个数组类型,它应该是这样的:
"prices":
{
"SharedMinPrice":{"USD":"0.00"},
"SharedAveragePrice":{"USD":"0.00"},
"PrivateMinPrice":{"USD":"8.82"},
"PrivateAveragePrice":{"USD":"26.85"},
"MinPrice":{"USD":"8.82"},
"AveragePrice":{"USD":"26.85"}}
}