Ошибка выдачи XmlSerialization при десериализации? - PullRequest
2 голосов
/ 18 августа 2010

Я пытаюсь сериализовать объект в базу данных, используя сериализацию 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">

Я впервые использую сериализацию, и мне интересно, что я делаю не так с моим кодом.

Ответы [ 3 ]

1 голос
/ 19 августа 2010

К сожалению, исключения XmlSerialization - это дерьмо.

Обычно вам нужно углубиться в бесчисленные уровни внутренних исключений, чтобы добраться до реальной ошибки.

1 голос
/ 19 августа 2010

Извините, я только что понял, что моя проблема в глупости = /

Я сериализировал класс, но пытался десериализовать только ObservableCollection.Как только я изменил это на сериализацию / десериализацию правильного объекта, он прекрасно работает, хотя я благодарю вас за совет о using блоков

1 голос
/ 19 августа 2010

Кстати, вам нужно using блоков вокруг вашего кода:

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