Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Json.NET反序列化-键值对?_C#_Json - Fatal编程技术网

C# Json.NET反序列化-键值对?

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

我目前在使用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对象(例如{“名称”:“值”}) 进入类型“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; }
}