我想序列化一個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._childTasksSurrogate
是null
。
有一個明確的代碼,你已經將null賦值給** childTasksSurrogate **,並在返回語句之前的get訪問器中。 –
Where?我沒有將我返回的值設爲空值,但是,我認爲它允許我找到問題:我理所當然地認爲反序列化不會調用getter,而只能調用setter。我會爲getter添加一個標誌,說明如果列表已被轉換爲列表。謝謝! –
Tipx
誰說你已經清空你正在返回的價值。您已在get accessor中將null指定給** _ childTasksSurrogate **。 –