【发布时间】:2016-07-27 11:19:03
【问题描述】:
我希望有人能告诉我我做错了什么,以及纠正它的最佳方法(或指向一个链接)。
我有以下代码/类,用于使用 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;
}
}
【问题讨论】:
-
要不要发一张你用来连载的魔杖图片?
-
如果你读了上面我告诉你的。我使用 C# BinaryFormatter。只需 BinaryFormatter.Serialize() 函数。
-
没有骰子,所有的 TileData.Corners 都反序列化为 255,无论出于何种原因。
-
好吧,您用于序列化的一段代码将有助于解决问题。
-
Bolierplate BinaryFormatter.Serialize(FileStream,Class) 代码。真的很难把这部分搞砸,而且 SOMETHING 正在序列化和反序列化而没有错误的事实告诉我(显然大多数其他人)有一个数据/结构问题正在传递给序列化程序。我相信我找到了一种解决方法,只需在类中实现我自己的 BinaryWriter/BinaryReader 函数并在没有格式化程序帮助的情况下创建文件。从我的搜索结果来看,它也将大大提高性能。感谢您对此事的持续关注,不胜感激。
标签: c# serialization unity3d