У меня есть общий список объектов, которые я пытаюсь сериализовать / десериализовать.
У самого класса объектов есть свойство общего списка другого класса,
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)
Так в чем может быть проблема?
РЕДАКТИРОВАТЬ :
Мне нужно уточнить, что это для 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, яused
StringWriter s = new StringWriter();
xml.Serialize(s, Sessions);
Итак, у меня нет доступа к фактическому XML-файлу для удаления encoding = "utf-16"
Это не позволит мне ответить на мой собственный вопросиз-за низкой репутации еще 5 часов, поэтому я выложу это здесь:
Итак, проблема обернуласьно не должно быть в кодировке, как было предложено.
По-видимому, все сериализуемые классы должны иметь параметр по умолчанию без конструктора.Теперь, когда я добавил их, все работает великолепно.(Я до сих пор не знаю, что это за вещь с сериализацией Windows Phone или сериализацией XML в целом)