>,c#,json"/>

首页 > 解决方案 > 无法将 json 反序列化为字典>

问题描述

我无法Dictionary<string, List<Purchas>>在 C# 中将 json 反序列化。

这是我的.json

{
  "Ukraine": {
    {
      "Credits": 500,
      "Name": "Clever goat",
      "Price": {
        "Amount": 100,
        "Currency": "UAH"
      }
    },
    {
      "Credits": 1000,
      "Name": "Smart hare",
      "Price": {
        "Amount": 190,
        "Currency": "UAH"
      }
    }
  },

  "USA": {
    {
      "Credits": 500,
      "Name": "Clever goat",
      "Price": {
        "Amount": 10,
        "Currency": "USD"
      }
    },
    {
      "Credits": 1000,
      "Name": "Smart hare",
      "Price": {
        "Amount": 19,
        "Currency": "USD"
      }
    }
  }
}

这是我的Purchase课:

public class Price
{
    public int Amount { get; set; }
    public string Currency { get; set; }
}

public class Purchase
{
    public int Credits { get; set; }
    public string Name { get; set; }
    public int Price { get; set; }
}

这是我试图反序列化它的方式:

var countryToPurchases = JsonConvert.DeserializeObject<Dictionary<string, List<Purchase>>>(dataJSON);

这是我得到的错误:

JsonReaderException:无效的属性标识符字符:{。路径“乌克兰”,第 3 行,位置 4。Newtonsoft.Json.JsonTextReader.ParseProperty()

我在这里想念什么?

标签: c#json

解决方案


你在这里有两个问题:

  1. Json 无效。那里应该有数组,但没有。
    一个有效的 json 看起来像这样:
[
  {
    "Ukraine": [
      {
        "Credits": 500,
        "Name": "Clever goat",
        "Price": {
          "Amount": 100,
          "Currency": "UAH"
        }
      },
      {
        "Credits": 1000,
        "Name": "Smart hare",
        "Price": {
          "Amount": 190,
          "Currency": "UAH"
        }
      }
    ]
  },
  {
    "USA": [
      {
        "Credits": 500,
        "Name": "Clever goat",
        "Price": {
          "Amount": 10,
          "Currency": "USD"
        }
      },
      {
        "Credits": 1000,
        "Name": "Smart hare",
        "Price": {
          "Amount": 19,
          "Currency": "USD"
        }
      }
    ]
  }
]
  1. Price属性应该是 type Price,而不是int
public class Purchase
{
    public int Credits { get; set; }
    public string Name { get; set; }
    public Price Price { get; set; }
}

推荐阅读