2010-08-18 108 views
2

我想使用xml序列化將一個對象序列化到數據庫中,但是當反序列化它時,我得到一個錯誤。反序列化時XmlSerialization拋出錯誤?

該錯誤是有XML文檔中的錯誤(2,2)"<MyCustomClass xmlns=''> was not expected."

我使用序列化代碼的內異常:

public static string SerializeToXml<T>(T obj) 
{ 
    if (obj == null) 
     return string.Empty; 

    StringWriter xmlWriter = new StringWriter(); 
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); 
    xmlSerializer.Serialize(xmlWriter, obj); 
    return xmlWriter.ToString(); 
} 

public static T DeserializeFromXml<T>(string xml) 
{ 
    if (xml == string.Empty) 
     return default(T); 

    T obj; 
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); 
    StringReader xmlReader = new StringReader(xml); 
    obj = (T)xmlSerializer.Deserialize(xmlReader); 
    return obj; 
} 

的SerializedXml開頭爲:

<?xml version="1.0" encoding="utf-16"?> 
<MyCustomClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

這是我第一次使用se rialization和我想知道我在做我的代碼錯了什麼。

+0

另外,通常'xmlReader'和'xmlWriter'將用於'XmlReader'的實例, 'XmlWriter',而不是'StringReader'和'StringWriter'。 – 2010-08-18 19:59:27

+0

爲了解決這個問題,我想我們需要看看MyCustomClass的聲明,以及XML的其他部分。 – 2010-08-18 19:59:56

+0

它告訴我,我不能創建抽象類的實例XmlWriter – Rachel 2010-08-18 20:01:43

回答

1

我很抱歉,我才意識到我的問題是愚蠢=/

我被序列化類,但試圖只反序列化的ObservableCollection。一旦我改變了序列化/去除正確對象的方式,它的效果很好,儘管我感謝你提供關於using塊的提示

1

順便說一句,你需要在你的代碼using塊:

using (StringReader reader = new StringReader(xml)) 
{ 
    obj = (T)xmlSerializer.Deserialize(reader); 
} 
+0

謝謝,我會補充 – Rachel 2010-08-19 11:36:03

1

不幸的是,XmlSerialization例外是一塊垃圾。

您通常必須深入到無數級別的內部異常才能找到真正的錯誤。

+0

我會記住,做任何其他調試時,謝謝 – Rachel 2010-08-19 12:09:37