在进行类转json字符串时,报错JsonException: Max allowed object depth reached while trying to export from type System.Single。
LitJson实际上是类的属性中有json不能识别的数据类型,这里就是float。什么类型是允许的呢?
在JsonData类中找到了答案。
public JsonData(bool boolean); public JsonData(double number); public JsonData(int number); public JsonData(long number); public JsonData(object obj); public JsonData(string str);
所以去掉float,或者 float转成double。
float x1 = 0.01F; double y = Convert.ToDouble(0.01F); 这时候y会变成0.09999992341…… 可以用Math.Round进行四舍五入,或者先将float转为字符串再用double.Parse转成double,避免精度错误。
下面以游戏地图节点位置vector是float类型转为double可存档类型为例说明:
// 地图节点管理器
public class MapNodeManager{ /// /// 地图节点数据 /// public List MapNodes { private set; get; }}
// 将要进行存档的内容
class MapNode
{
/// /// 位置 /// public Vector2 LocalPos { private set; get; }}
// 实际存档的数值
class MapNodeArchive
{
/// /// 位置 /// public Vector2Archive LocalPos;
}
// 存档管理器
class GameArchiveManager
{
Debug.Log("清空存档所有地图列表对象的数据");
ga.List_MapNodesArchives.RemoveAll(j => true);
// 得到manager的save
MapNodeManager mapNodesSave = ManagerController.Instance.MMapNodeManager;
// 得到n列节点的save
List mapNodesColumns = mapNodesSave.MapNodes;
if (mapNodesColumns != null) { for (int i = 0; i < mapNodesColumns.Count; i++) { Debug.Log(" 得到一列节点的存档"); MapColumnNodeArchive mnal = CreateMapNodeArchiveList(mapNodesColumns[i]); ga.List_MapNodesArchives.Add(mnal);
} }
public MapNodeArchive CreateMapNodeArchive(MapNode mapANode) { if (mapANode != null) { MapNodeArchive asmna = new MapNodeArchive(); asmna.NodeId = mapANode.NodeId; // 节点位置 asmna.LocalPos = CreateVector3Archive(mapANode.LocalPos);
}
return asmna; } return null;
}
public Vector3Archive CreateVector3Archive(Vector2 v2) { Vector3Archive v3a = new Vector3Archive(); v3a.x = double.Parse(v2.x.ToString()); v3a.y = double.Parse(v2.y.ToString()); return v3a; }
}
先将float转为字符串再用double.Parse转成double,避免精度错误