我一直在尝试序列化包含数组和列表的列表。
我一直在尝试不同的东西,但无法使其发挥作用。
我收到此错误:
Type 'EngineTest.MapData+tileDataBackground' in Assembly 'EngineTest, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null' is not marked as serializable.
这是我尝试在List中序列化的MapData.cs。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EngineTest
{
[Serializable]
public class MapData
{
public struct tileDataBackground
{
public int tileTextureX;
public int tileTextureY;
}
public struct tileDataForeground
{
public int tileTextureX;
public int tileTextureY;
}
public struct tileDataCollision
{
public bool tileCollision;
}
public tileDataBackground[,] tileBackground;
public tileDataForeground[,] tileForeground;
public tileDataCollision[,] tileCollision;
public List<items> itemData = new List<items>();
public List<functions> functionData = new List<functions>();
}
}
以下是我无法将其序列化的代码(Program.mapData是列表):
using (FileStream stream = File.Open("test.dat", FileMode.Create))
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, Program.mapData);
stream.Close();
}
你能指出我在正确的方向吗?
提前致谢。
答案 0 :(得分:1)
您必须将所有类和子类设为Serializable
[Serializable]
public class MapData
{
[Serializable]
public struct tileDataBackground
{
public int tileTextureX;
public int tileTextureY;
}
...
修改的
如下面的注释所示,您在所有Serializable类的字段中使用的类型必须是Serializable。未用作类结构的一部分或在nonSerializable字段中使用的类型不需要是Serializable。