序列化包含数组和其他列表的列表

本文关键字:列表 其他 包含 数组 序列化 | 更新日期: 2023-09-27 18:37:07

我一直在尝试序列化包含数组和列表的列表。

我一直在尝试不同的事情,但无法使其工作。

我收到此错误:

Type 'EngineTest.MapData+tileDataBackground' in Assembly 'EngineTest, Version=1.0.0.0,
   Culture=neutral, PublicKeyToken=null' is not marked as serializable.

这是我的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();
        }

你能在这里指出我正确的方向吗?

提前谢谢。

序列化包含数组和其他列表的列表

您必须将所有类和子类设置为可序列化

[Serializable]
public class MapData
{
    [Serializable]
    public struct tileDataBackground
    {
        public int tileTextureX;
        public int tileTextureY;
    }
 ...

编辑


正如下面的注释所指出的,您在所有可序列化类的字段中使用的类型本身必须是可序列化的。 不用作类结构的一部分或在不可序列化字段中使用的类型不需要是可序列化的。