C#序列化问题-Int数组未正确保存/返回
本文关键字:确保 保存 返回 序列化 问题 -Int 数组 | 更新日期: 2023-09-27 17:58:46
我希望有人能告诉我我做错了什么,以及纠正错误的最佳方法(或者给我指一个这样做的链接)。
我有下面的代码/类,我正在使用BinaryFormatter序列化我的数据。由于某种原因,TileData类中的第一个int(Corners)一直反序列化为255。在序列化之前,我已经验证了数据是否正确地保存在结构中,因此在序列化和反序列化之间,数据发生了一些事情,我不确定为什么或如何检查它是哪一端。
有什么想法吗?
[Serializable]
public class GameSaveData
{
public readonly string Name;
public readonly int[] LevelSettings;
public readonly int[] GTime;
public readonly ChunkData[] Data;
public GameSaveData(string _name, int[] _settings, int[] _time, ChunkData[] _chunks)
{
Name = _name;
LevelSettings = _settings;
GTime = _time;
Data = _chunks;
}
}
[Serializable]
public class TileData
{
public readonly int Corners;
public readonly int TypeID;
public readonly int[] FloorSpecs; // 0 -- Floor Missing, 1 - Floor Type ID, 2 -- SubFloor Type
public TileData(int _c, int _t, int[] _floorSpecs)
{
Corners = _c;
TypeID = _t;
FloorSpecs = _floorSpecs;
}
}
[Serializable]
public class ChunkData
{
public readonly int[] Position;
public readonly TileData[] Data;
public ChunkData(Vector3 _pos, TileData[] _data)
{
Position = new int[] { (int)_pos.x, (int)_pos.y, (int)_pos.z };
Data = _data;
}
}
我对此不确定,但变量标记为只读这一事实难道不会阻止正确的反序列化吗?
为什么不使用Unity中提供的JsonUtility类呢?毕竟,Json的应用范围更广。
可序列化类必须是具有无参数构造函数的简单容器
看看这篇文章。
像这样的
[Serializable]
public class GameSaveData
{
public string Name { get; set; }
public int[] LevelSettings { get; set; }
public int[] GTime { get; set; }
public ChunkData[] Data { get; set; }
private GameSaveData()
{
// parameter less constrctor
}
public GameSaveData(string _name, int[] _settings, int[] _time, ChunkData[] _chunks)
{
Name = _name;
LevelSettings = _settings;
GTime = _time;
Data = _chunks;
}
}
[Serializable]
public class TileData
{
public int Corners { get; set; }
public int TypeID { get; set; }
public int[] FloorSpecs { get; set; } // 0 -- Floor Missing, 1 - Floor Type ID, 2 -- SubFloor Type
public TileData()
{
// parameter less constrctor
}
public TileData(int _c, int _t, int[] _floorSpecs)
{
Corners = _c;
TypeID = _t;
FloorSpecs = _floorSpecs;
}
}
[Serializable]
public class ChunkData
{
public readonly int[] Position { get; set; }
public readonly TileData[] Data { get; set; }
public ChunkData()
{
// parameter less constrctor
}
public ChunkData(Vector3 _pos, TileData[] _data)
{
Position = new int[] { (int)_pos.x, (int)_pos.y, (int)_pos.z };
Data = _data;
}
}