我正在尝试反序列化描述以下内容的json:
但是当我尝试使用“
当我使用json2csharp生成c#代码时,得到以下结果:
它认为我的Item对象是'RootObject',并且它给我一个'Recipe'对象,而不是在列表'recipe'中的'Effect'对象列表。
以下是我游戏的一些代码和类,这样你就可以看到我正在使用什么:
一个类型为Item的对象列表,每个Item包含一些属性以及一个名为'recipe'的对象列表,该列表包含三个自身属性(action、value和target)的Effect对象。
当我使用“JsonConvert.SerializeObject”序列化我的列表时,我得到以下json:
[
{
"name": "WOOD",
"yield": 1.0,
"recipe": [
{
"action": "ADD",
"value": 1.0,
"target": "WOOD"
}
],
"count": 0.0,
"numWorkers": 0,
"id": 1
},
{
"name": "CLAY",
"yield": 2.0,
"recipe": [
{
"action": "ADD",
"value": 2.0,
"target": "CLAY"
}
],
"count": 0.0,
"numWorkers": 0,
"id": 2
},
{
"name": "SPEAR",
"yield": 0.5,
"recipe": [
{
"action": "ADD",
"value": 0.5,
"target": "SPEAR"
},
{
"action": "SUB",
"value": 1.0,
"target": "WOOD"
},
{
"action": "SUB",
"value": 5.0,
"target": "CLAY"
}
],
"count": 0.0,
"numWorkers": 0,
"id": 3
},
{
"name": "STICK",
"yield": 4.0,
"recipe": [
{
"action": "ADD",
"value": 4.0,
"target": "STICK"
},
{
"action": "SUB",
"value": 1.0,
"target": "WOOD"
}
],
"count": 0.0,
"numWorkers": 0,
"id": 4
}
]
但是当我尝试使用“
Items = JsonConvert.DeserializeObject<List<Item>>(jsonstring);
”进行反序列化时,出现以下错误:A first chance exception of type 'System.NullReferenceException' occurred in Newtonsoft.Json.dll
并且我的“Items”列表为空。当我使用json2csharp生成c#代码时,得到以下结果:
public class Recipe
{
public string action { get; set; }
public double value { get; set; }
public string target { get; set; }
}
public class RootObject
{
public string name { get; set; }
public double yield { get; set; }
public List<Recipe> recipe { get; set; }
public double count { get; set; }
public int numWorkers { get; set; }
public int id { get; set; }
}
它认为我的Item对象是'RootObject',并且它给我一个'Recipe'对象,而不是在列表'recipe'中的'Effect'对象列表。
以下是我游戏的一些代码和类,这样你就可以看到我正在使用什么:
public List<Item> Items;
private void Game_Load(object sender, EventArgs e)
{
Items = JsonConvert.DeserializeObject<List<Item>>(jsonstring);
}
public class Item
{
public string name;
public double yield;
public List<Effect> recipe = new List<Effect>();
public double count;
public int numWorkers;
public int id;
public Item()
{
name = "";
//configureItem();
}
public Item(string nm)
{
name = nm.ToUpper();
//configureItem();
}
public List<Effect> getRecipe() {
return recipe;
}
}
public class Effect
{
public string action;
public double value;
public string target;
public Effect(string act, double val, string tar)
{
action = act.ToUpper();
value = val;
target = tar.ToUpper();
}
}
我需要在我的所有类中使用{ get; set; }
吗?我之前尝试添加它,但似乎会导致我的VS在调试期间跳过行以及各种奇怪的问题。还是这只是一个Json格式问题?任何帮助将不胜感激,我已经在这个网站和Google上寻找了很久,现在我快要抓狂了。