У меня есть общий список объектов, которые я пытаюсь сериализовать/desearilize. Самого классОшибка десериализации при десериализации общего списка
Объектов имеет свойство общего списка другого класса,
class Exercise
{
public int Duration { get; set; };
public string Name { get; set; };
}
class Session
{
public DateTime Date { get; set; }
public List<Exercise> ExerciseList { get; set; }
}
Это как сериализация выглядит
Session session = new Session((DateTime)dpDate.Value, exercises); //exercises is a List<Exercise>
...
Sessions = new List<Session>();
Sessions.Add(session);
XmlSerializer xml = new XmlSerializer(typeof(List<Session>));
xml.Serialize(stream, Sessions);
...
Это как полученный XML выглядит
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfSession xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Session>
<Date>2012-01-17T00:00:00+03:00</Date>
<ExerciseList>
<Exercise>
<Name>q</Name>
<Duration>10</Duration>
</Exercise>
<Exercise>
<Name>w</Name>
<Duration>20</Duration>
</Exercise>
</ExerciseList>
</Session>
</ArrayOfSession>
Однако при попытке десериализовать это так
...
XmlSerializer xml = new XmlSerializer(typeof(List<Session>));
Sessions = (List<Session>)xml.Deserialize(stream);
...
Он показывает следующее сообщение об ошибке во второй строке:
InvalidOperationException Там есть ошибка в XML-документе (3,4)
Так что может быть проблема?
EDIT:
мне нужно уточнить, что для Windows Phone, поэтому поток формируется как этот
IsolatedStorageFileStream stream = storage.CreateFile(fileName);
Sessions = new List<Session>();
Sessions.Add(session);
XmlSerializer xml = new XmlSerializer(typeof(List<Session>));
xml.Serialize(stream, Sessions);
Однако, с целью показать структуру XML я использовал
StringWriter s = new StringWriter();
xml.Serialize(s, Sessions);
Таким образом, у меня нет доступа к реальному файлу XML для удаления кодирования = "UTF-16"
Это не позволит мне ответить на мой собственный вопрос в связи с низкой репутацией в течение еще 5 часов, так что я выложу его здесь:
Таким образом, проблема оказалась не в кодировке, так как было предложено.
По-видимому, все классы, которые сериализуются, должны иметь существующий по умолчанию параметр less constructor. Теперь, когда я добавил их, все работает великолепно. (Я до сих пор не знаю, если это связано с сериализацией xml-кода Windows или сериализацией xml вообще)
Можете ли вы попытаться десериализировать его, удалив 'encoding =" utf-16 "?' –
Полностью удалив или заменив что-нибудь еще? –
полностью удалите его, также укажите код, как вы генерируете поток. –