2010-08-18 110 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