C# Json.NET反序列化-键值对?
我目前在使用Json.NET反序列化名称、键/值对集合时遇到一些问题 下面是我尝试使用的Json示例:C# Json.NET反序列化-键值对?,c#,json,C#,Json,我目前在使用Json.NET反序列化名称、键/值对集合时遇到一些问题 下面是我尝试使用的Json示例: "prices": { "SharedMinPrice":{"USD":"0.00"}, "SharedAveragePrice":{"USD":"0.00"}, "PrivateMinPrice":{"USD":"8.82"}, "PrivateAveragePrice":{"USD":"26.85"}, "MinPrice":{"USD":"8.82
"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对象(例如{“名称”:“值”})
进入类型“System.Collections.Generic.List`1[APITypes.PropertyPrice]”
因为该类型需要一个JSON数组(例如[1,2,3])来反序列化
没错
我在后台类中使用以下代码:
[JsonProperty("prices")]
public List<PropertyPrice> Prices { get; set; }
我做错了什么
提前感谢您的帮助。开始时忘记了开场白{ {“价格”:{“SharedMinPrice”:{“USD”:“0.00”},“SharedAveragePrice”:{“USD”:“0.00”},“PrivateMinPrice”:{“USD”:“8.82”},“PrivateMinPrice”:{“USD”:“26.85”},“MinPrice”:{“USD”:“8.82”},“AveragePrivateMPrice”:{“USD 26.85”} -->当json没有反序列化时,可以使用类似的方法来测试它 此外,您没有将其作为数组传入:
{"employees": [{"id":"1"},{"id":"2"}]}
您的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"}}
}
因为它不是一个数组,所以您可以使用
字典
var obj = JsonConvert.DeserializeObject<Price>(json);
Console.WriteLine(obj.Prices["SharedMinPrice"]["USD"]);
var obj=JsonConvert.DeserializeObject(json);
Console.WriteLine(对象价格[“SharedMinPrice”][“USD”]);
公共类价格
{
公共字典价格{set;get;}
}
您正在尝试将格式为{“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; }
}
或者,如果您想动态处理各种货币,可以使用字典
代替MoneyAmount
。在“AveragePrice”之后有两个“}}”。。您是否错过了开头“{”?代码无法运行的原因很简单。请参阅我的答案。json很可能包含其他货币。例如,“SharedMinPrice”:{“EUR”:“0.00”},
@L.B是的,但这不是提问者遇到的问题。提问者遇到的问题是JSON结构和他试图反序列化的.NET类型不匹配。当然,但是你发布的答案只适用于此示例,而不是一般答案。我认为OP不需要这样的答案。
public class Price
{
public Dictionary<string, Dictionary<string, decimal>> Prices { set; get; }
}
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; }
}