0

我想序列化一個MyClass,這是一個包含列表MyClass的類。序列化T包含列表<T>

在XML中,我想只寫myClass.Name,那麼當我反序列化它時,我會發現哪個MyClass應該在哪個MyClass中。我有以下代碼將MyClass列表正確序列化爲string列表。但是,它並不反序列化字符串列表。

//List of actual object. It's what I use when I work with the object. 
[XmlIgnore] 
public List<TaskConfiguration> ChildTasks { get; set; } 

//Used by the serializer to get the string list, and used 
//by the serializer to deserialize the string list to. 
[XmlArray("ChildTasks")] 
public List<string> ChildTasksSurrogate 
{ 
    get 
    { 
     List<string> childTaskList = new List<string>(); 

     if (ChildTasks != null) 
      childTaskList.AddRange(ChildTasks.Select(ct => ct.Name).ToList()); 

     if (_childTasksSurrogate != null) 
      childTaskList.AddRange(_childTasksSurrogate); 

     //Clears it not to use it when it serializes. 
     _childTasksSurrogate = null; 
     return childTaskList; 
    } 
    set 
    { 
     _childTasksSurrogate = value; 
    } 
} 

[XmlIgnore] 
private List<string> _childTasksSurrogate; 

正如我所說的,序列化的作品。問題在於反序列化。反序列化後,MyClass._childTasksSurrogatenull

+2

有一個明確的代碼,你已經將null賦值給** childTasksSurrogate **,並在返回語句之前的get訪問器中。 –

+0

Where?我沒有將我返回的值設爲空值,但是,我認爲它允許我找到問題:我理所當然地認爲反序列化不會調用getter,而只能調用setter。我會爲getter添加一個標誌,說明如果列表已被轉換爲列表。謝謝! – Tipx

+0

誰說你已經清空你正在返回的價值。您已在get accessor中將null指定給** _ childTasksSurrogate **。 –

回答

0

的問題涉及如何進行XmlSerializer反序列化XML: 我認爲XmlSerializer將分配全屬性(讀:喜歡它添加的所有元素(讀myList = DeserializedList),而它看起來:myList.AddRange(DeserializedList)

+0

這並沒有真正說明你是如何解決你的問題的。考慮添加代碼片段來說明您的解決方案。 –