2011-04-26 58 views
0

我想连载与XMLSerializer枚举的List<>当我得到以下错误XML序列化和列表<enum> C#

'GameDataBuilder.vshost.exe' (Managed): Loaded 'uoqssn9i' 
A first chance exception of type 'System.NullReferenceException' occurred in uoqssn9i 
A first chance exception of type 'System.TypeInitializationException' occurred in uoqssn9i 
A first chance exception of type 'System.InvalidOperationException' occurred in System.Xml.dll 
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Xml.dll 

我已经采取一看List<>和所有的值内是有效的。使用相同的代码,我可以序列化一个枚举(不是列表)和所有其他类型(int,float等)和其他类型的列表就好了。它看起来像枚举列表导致错误。

之前有人遇到过这个问题吗?

任何帮助,将不胜感激

编辑

序列化方法:

public void SerialiseToXML(XmlSerializer serializer, string directory) 
{ 

    string fileName = directory + m_Name + ".xml"; 

    if (!Directory.Exists(directory)) 
    { 
     DirectoryInfo di = Directory.CreateDirectory(directory); 
    } 

    if (!File.Exists(fileName)) 
    { 
     using(File.Create(fileName)) 
     { 
     } 
    } 

    using (TextWriter textWriter = new StreamWriter(fileName)) 
    { 
     serializer.Serialize(textWriter, m_Objects); 
    } 
} 

串行:

private void GenerateSerializer() 
{ 
    List<Type> dynamiclyCreatedTypes = mTypeManager.GetSerializeableTypes(); 
    m_Serializer = new XmlSerializer(typeof(List<ISerializeable>), dynamiclyCreatedTypes.ToArray()); 
} 

的列表中生成这样的:

type = typeof(List<>).MakeGenericType(type); 
+0

你可以发布你用来序列化的代码片段吗? – 2011-04-26 19:02:08

+0

实际上,你如何创建你传入的XmlSerializer。 – 2011-04-26 19:08:21

+0

虽然在不在列表中时它使用反射来生成,但它在序列化时生成使用反射 – Andrew 2011-04-26 19:09:22

回答

0

我认为问题在于您正在使用typeof(List<ISerializeable>)来创建XmlSerializer。序列化程序无法使用接口,您需要为它们提供具体类型。

您能用这个typeof(List<EnumType>)代替吗?

+0

枚举是在额外的类型(动态创建类型),串行器也序列化了很多其他类型,所以typeof(列表)不会是理想的但我会尝试看看 – Andrew 2011-04-26 19:17:11

+0

只是澄清,枚举(和所有其他类型输出)的列表是在一个类是ISerializeable的孩子 – Andrew 2011-04-26 19:18:46