2011-04-26 36 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