我正在尝试序列化一些包含带有子元素的IList
的对象。 IList
是非通用的,我不能只在通用的那个。
我得到了一个例外,比如“MyObjectChild类型没有被期待......”并且它说了一些关于XMLInclude的内容,但我不认为那就是我正在搜索的内容。
有没有人知道如何使XMLSerialzer
序列化子元素?
两个元素都是[Serializable]
XmlSerializer xmlSerializer = new XmlSerializer(typeof ObservableCollection<MyEntryViewItem>));
FileStream fileStream = new FileStream(exportPath, FileMode.Create);
xmlSerializer.Serialize(fileStream, _listEntries);
public IList ElementChildren { get { return _item.Children; } set { _item.Children = value; RaisePropertyChanged(() => ElementChildren); } }
[Serializable]
public sealed class ElementChild
{
private int _id;
private string _text;
private string _path;
...
}
答案 0 :(得分:1)
根据Simon Hewitt,您只需使用XmlInclude
指定列表的类型即可。可以在roboxman.wordpress.com
答案 1 :(得分:0)
XmlSerializer以特殊方式处理IList(实际上是ICollection和IEnumerable,但IList都是)。 XmlSerializer MSDN页面上有注释:
XmlSerializer为类提供特殊处理 实现IEnumerable或ICollection。实现的类 IEnumerable必须实现一个单一的公共Add方法 参数。 Add方法的参数必须与原来的类型相同 从Current属性返回的返回值 GetEnumerator,或该类型的基础之一。实现的类 除了IEnumerable之外,ICollection(如CollectionBase)必须 有一个公共项索引属性(C#中的索引器) 整数,它必须具有整数类型的公共Count属性。该 Add方法的参数必须与返回的类型相同 Item属性,或该类型的基础之一。对于课程 实现ICollection时,将检索要序列化的值 来自索引的Item属性,而不是通过调用GetEnumerator。