我有一個我試圖序列化/反序列化的對象的通用列表。反序列化通用列表時的反序列化錯誤
的對象的類本身有另一個類的泛型列表的屬性,
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:
我需要澄清這是窗口電話,所以流形成這樣
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文件來刪除encoding =「utf-16」
它不會讓我回答我的問題,由於低信譽另外5個小時,所以我將它張貼在這裏:
所以,這個問題竟然是沒有編碼,已建議。
顯然,所有正在被序列化的類都必須有一個默認參數少的構造函數。現在,我已經添加了他們所有的作品出色。 (我仍然不知道它是否是Windows Phone xml序列化或xml序列化的一般情況)
你可以嘗試通過刪除'encoding =「utf-16」?「來反序列化它嗎? – 2012-01-16 10:39:26
完全刪除或用其他東西代替? – 2012-01-16 10:40:28
完全刪除它,還提供代碼如何生成流。 – 2012-01-16 10:43:19