序列化不适用于多个项目

时间:2011-08-22 14:53:10

标签: c# xml serialization xna windows-phone

我正在使用xna框架为Windows手机创建游戏。 我想将我的级别存储在xml文件中,所以我想我将使用xmlserialization和反序列化。我首先创建了一个测试项目,看看这是否有效,并且没有问题。

现在我已经创建了一个关卡编辑器,它是一个Windows窗体应用程序,用于构建级别,而不是我想要序列化它们,并在另一个项目(Windows Phone)中反序列化它。为了保持对象相同,我在windows窗体应用程序中引用了windows phone应用程序。我对序列化使用了相同的引用。

使用System.Xml.Serialization;

但是当我尝试序列化对象时,我得到一个例外: 反映类型的错误。

所以我的问题是为什么我不能从不同的项目序列化对象? 或者这是不可能的?

public static void SaveLevel(Level level)
{
   FileStream fs = new FileStream(@"c:\level1.xml", FileMode.Create);

   MemoryStream ms = new MemoryStream();
   Serialize(ms, level);

   fs.Write(ms.ToArray(), 0, (int)ms.Length);

   ms.Close();
   fs.Close();

   ms.Dispose();
   fs.Dispose();
}

public static void Serialize(Stream streamObject, object objectForSerialization)
{
   if (objectForSerialization == null || streamObject == null)
        return;

   XmlSerializer serializer = new XmlSerializer(objectForSerialization.GetType()); //error occurs
   serializer.Serialize(streamObject, objectForSerialization);
}

需要序列化的对象。

public class Level
{
    [XmlElement]
    public string Name { get; set; }

    public Level()
    {
    }
}

一旦我将文件复制到levelEditor项目,它将序列化并反序列化它。 但我实际上不想复制这些文件,因为如果我在一个项目中更改文件,我还需要在另一个不太方便的项目中更改它。

1 个答案:

答案 0 :(得分:0)

据我所知,要序列化自定义类型,您必须为类提供[Serializable]属性。像这样。

[Serializable]
public class Level
{

    //......
}

看看是否解决了这个问题。