0

配列とリストを含むリストをシリアル化しようとしています。

色々と試しているのですが上手くいきません。

このエラーが発生しています:

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();
        }

ここで正しい方向を教えてもらえますか?

前もって感謝します。

4

1 に答える 1

1

すべてのクラスとサブクラスをシリアライズ可能にする必要があります

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

編集


以下のコメントにあるように、すべてのシリアライズ可能なクラスのフィールドで使用する型は、それら自体がシリアライズ可能でなければなりません。クラスの構造の一部として使用されていない型や、Serializable 以外のフィールドで使用されている型は、Serializable である必要はありません。

于 2012-06-13T15:35:02.500 に答える