我有一些樹節點結構的類。它具有兒童屬性,只讀集合類型用於隱藏直接更改子項和添加子控件的AddChild(...)方法。如何使用自定義添加方法進行收集反序列化過程?
class TreeNode {
List<TreeNode> _children = new List<TreeNode>();
public IReadOnlyList<TreeNode> Children => children;
public string Name { get; set; } // some other filed
public void AddChild(TreeNode node){
// ... some code
_children.Add(node);
}
}
我需要爲我的課程提供反序列化。我想:
[Serializable]
[XmlRoot(ElementName = "node")]
class TreeNode {
List<TreeNode> _children = new List<TreeNode>();
[XmlElement(ElementName = "node")]
public IReadOnlyList<TreeNode> Children => children;
[XmlAttribute(DataType = "string", AttributeName = "name")]
public string Name { get; set; } // some other filed
public void AddChild(TreeNode node){
// ... some code
_children.Add(node);
}
public static TreeNode Deserialize(Stream stream) {
var serializer = new XmlSerializer(typeof(TreeNode));
var obj = serializer.Deserialize(stream);
var tree = (TreeNode)obj;
return tree;
}
}
當然,這並不工作,因爲IReadOnlyList沒有Add方法。
是否可以將AddChild綁定到反序列化過程?如果'是' - 如何?
如何提供具有反序列化能力的相同封裝級別?
任何特別的爲什麼它是一個'ReadOnlyList'?爲什麼不把它變成一個私人列表'然後公開可以添加到它的'AddChild'方法? –
JonE
你應該看看'ISerializable'接口。 https://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 –
@CihanYakar'XmlSerializer'不關心關於'ISerializable'和'IXmlSerializable'很難正確實現 –