我正在使用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项目,它将序列化并反序列化它。 但我实际上不想复制这些文件,因为如果我在一个项目中更改文件,我还需要在另一个不太方便的项目中更改它。
答案 0 :(得分:0)
据我所知,要序列化自定义类型,您必须为类提供[Serializable]属性。像这样。
[Serializable]
public class Level
{
//......
}
看看是否解决了这个问题。