【发布时间】:2014-02-25 18:46:24
【问题描述】:
我正在为使用 c# xna 开发的游戏保存和加载。我有一长串要序列化的类数组,但我遇到了其中一个问题。我已经完成了如下课程
[ProtoContract]
public class CompleteTile
{
int _id;
[ProtoMember(1)]
public int ID
{
get { return _id; }
set { _id = value; }
}
bool _Passable;
[ProtoMember(2)]
public bool Passable
{
get { return _Passable; }
set { _Passable = value; }
}
我可以使用成功序列化它
using (var stream = File.OpenWrite("" + saveDestination + "level.dat"))
{ Serializer.Serialize(stream, Globals.levelArray); }
但是当我尝试反序列化时,我得到以下信息 - 类型不是预期的,并且无法推断出任何合同:GameName1.CompleteTile[,,]
反序列化代码 -
using (var stream = File.OpenRead("" + loadDestination + "level.dat"))
{ Globals.levelArray = Serializer.Deserialize<CompleteTile[, ,]>(stream); }
我怀疑这是因为它是一个多维数组,但我不确定,感谢任何帮助。
【问题讨论】:
-
不支持多维数组(它们在 protobuf 规范中不存在) - 你应该有一个更具体的错误 - 我会调查为什么它没有t 确切地告诉你(因为:该消息确实存在于代码中)
-
谢谢,我认为这就是原因,虽然我预计它会序列化失败,但它只会在脱盐时失败。您对进行的最佳方式有什么建议吗?它有多个 500x500 网格,因此数组看起来像 Globals.levelArray[level,x,y] 使用 binaryformatter 序列化最多需要 2 分钟和 350mb :/
标签: .net c#-4.0 protobuf-net