【问题标题】:XmlSerialization throwing error when deserializing?反序列化时XmlSerialization抛出错误?
【发布时间】:2010-08-18 19:54:26
【问题描述】:

我正在尝试使用 xml 序列化将对象序列化到数据库中,但是在反序列化它时出现错误。

错误是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">

这是我第一次使用序列化,我想知道我的代码做错了什么。

【问题讨论】:

  • 顺便说一句,通常xmlReaderxmlWriter 将用于XmlReaderXmlWriter 的实例,而不是StringReaderStringWriter
  • 要解决这个问题,我想我们需要查看MyCustomClass 的声明,以及XML 的其余部分。
  • 它告诉我我无法创建抽象类 XmlWriter 的实例
  • 我的等效代码运行良好。你可以序列化空类吗?然后给它添加一些属性。
  • MyCustomClass 代码相当长...它不包含除[Serializable] 之外的任何属性,其唯一属性是CustomObjects 的CustomObservableCollection(继承自基本ObservableCollection)。

标签: c# xml-serialization serialization


【解决方案1】:

顺便说一句,您的代码周围需要 using 块:

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

【讨论】:

    【解决方案2】:

    不幸的是,XmlSerialization 异常是一个废话。

    您通常必须深入研究无数级别的内部异常才能找到真正的错误。

    【讨论】:

    • 在进行任何其他调试时我会牢记这一点,谢谢
    【解决方案3】:

    对不起,我才意识到我的问题是愚蠢的 =/

    我正在序列化该类,但试图仅反序列化 ObservableCollection。一旦我将其更改为序列化/反序列化正确的对象,它就可以很好地工作,尽管我感谢您提供有关 using 块的提示

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      相关资源
      最近更新 更多