好的,所以我看了一遍,找不到如何做到这一点的答案。
这是我的json文件
{
"item": {
"icon": "icon.png",
"icon_large": "icon_large.png",
"id": 453,
"type": "misc",
"typeIcon": "icontype.png",
"name": "Item name",
"description": "item description",
"current": {
"trend": "neutral",
"price": 174
},
"today": {
"trend": "positive",
"price": "+2"
},
"premium": "false"
}
}
我尝试过这个类作为反序列化的方法(我只需要“当前”树中的项目名称和价格)
public class MyItem
{
public Dictionary<string, Item> item;
}
public class Item
{
public string name;
public Dictionary<string, Current> current;
}
public class Current
{
public string price;
}
这是从我的主要课程中调用的
private void buttonAddItemToWatcher_Click(object sender, EventArgs e)
{
string url = "link to json above;
string json = new WebClient().DownloadString(url);
MyItem newItem = new MyItem();
JsonConvert.PopulateObject(json, newItem);
}
但我收到此错误
Newtonsoft.Json.dll中出现了“Newtonsoft.Json.JsonSerializationException”&gt;类型的未处理异常
其他信息:将值&gt;“icon.png”转换为“RS_GrandExchangeWatcher.Item”时出错。路径'item.icon',第1行,第95位。
我不太了解如何设置我的类以便用我提供的json填充我的MyItem类
答案 0 :(得分:2)
您的C#类与您的JSON不匹配。
复制您的JSON,转到Visual Studio 2015,打开.cs文件,在菜单编辑 - &gt; 选择性粘贴 - &gt; 将JSON粘贴为类。
你得到相应的C#类:
public class MyItem
{
public Item item { get; set; }
}
public class Item
{
public string icon { get; set; }
public string icon_large { get; set; }
public int id { get; set; }
public string type { get; set; }
public string typeIcon { get; set; }
public string name { get; set; }
public string description { get; set; }
public Current current { get; set; }
public Today today { get; set; }
public string premium { get; set; }
}
public class Current
{
public string trend { get; set; }
public int price { get; set; }
}
public class Today
{
public string trend { get; set; }
public string price { get; set; }
}
答案 1 :(得分:0)
您的架构与JSON
成为MyItem
您的根对象,它表示它的属性"item"
的值为Dictionary<string, Item>
,但您的Item
类有name
仅限于current
属性,而在JSON
中有"icon"
等其他几个属性。
您可以尝试将所有内容解析为Dictionary<string, dynamic>
,迭代并仅将current
属性值解析为Current
类