我有一个GameBoard
类,它有两种保存和加载方法:
public void Save(string pFilePath)
{
var s = JsonConvert.SerializeObject(this);
System.IO.File.WriteAllText(pFilePath, s);
}
public static GameBoard Load(string pFilePath)
{
var s = System.IO.File.ReadAllText(pFilePath);
return JsonConvert.DeserializeObject<GameBoard>(s);
}
这些是GameBoard
类的属性:
#region Fields
public int Width { get; protected set; }
public int Height { get; protected set; }
public GameBoardCell[,] Cells { get; protected set; }
public bool WallSurrounded { get; set; }
#endregion
Save
方法效果很好,这就是内容:
{&#34;宽度&#34;:3,&#34;身高&#34;:3,&#34;细胞&#34;:[[{&#34;内容&#34;:0,& #34;球&#34; {&#34; ColorID&#34;:0,&#34; ID&#34;:&#34; 4481e52d-76fc-4335-805b-c47e36e3d57d&#34;}&#34 ;目标&#34;:空},{&#34;内容&#34;:1,&#34;球&#34;:空,&#34;目标&#34;:空},{&#34;内容& #34;:0,&#34;球&#34;:空,&#34;目标&#34;:空}],[{&#34;内容&#34;:0,&#34;球&#34 ;:空,&#34;目标&#34;:空},{&#34;内容&#34;:0,&#34;球&#34;:空,&#34;目标&#34;:空} ,{&#34;内容&#34;:0,&#34;球&#34;:空,&#34;目标&#34;:空}],[{&#34;内容&#34;:0, &#34;球&#34;:空,&#34;目标&#34;:空},{&#34;内容&#34;:1,&#34;球&#34;:空,&#34;目标&#34;:空},{&#34;内容&#34;:0,&#34;球&#34;:空,&#34;目标&#34; {&#34; ColorID&#34 ;: 0,&#34; ID&#34;:&#34; aaf6f4ae-0a1a-4c3d-9608-f13ae9c4bba7&#34;}}]]&#34; WallSurrounded&#34;:真}
但是,当我对同一个文件使用Load
方法时,我的所有属性都是null
或默认值(0表示整数)。
我必须在我的每个属性中添加[JsonProperty]
才能使其正常工作。我之前使用过Json.NET,我记得我没有添加任何属性。这个意图是从Json.NET改变的(我刚刚从Nuget获得这个新项目的6.0.6),或者我做错了什么?
答案 0 :(得分:3)
JSON.NET忽略private
,protected
或internal
属性设置器。将属性转换为public
,或使用属性装饰它们。