2

我正在尝试序列化一些包含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;
    ...
}
4

2 回答 2

1

根据Simon Hewitt的说法,您可以使用XmlInclude来指定列表的类型。可以在roboxman.wordpress.com找到替代方案

于 2012-08-09T07:46:38.453 回答
0

XmlSerializer 以特殊方式处理 IList(实际上是 ICollection 和 IEnumerable,但 IList 两者都是)。XmlSerializer MSDN 页面上有注释:

XmlSerializer 对实现 IEnumerable 或 ICollection 的类进行特殊处理。实现 IEnumerable 的类必须实现采用单个参数的公共 Add 方法。Add 方法的参数必须与从 GetEnumerator 返回的值的 Current 属性返回的类型相同,或者该类型的基数之一。除了 IEnumerable 之外,实现 ICollection 的类(例如 CollectionBase)必须具有采用整数的公共 Item 索引属性(C# 中的索引器),并且必须具有整数类型的公共 Count 属性。Add 方法的参数必须与从 Item 属性返回的类型相同,或者是该类型的基数之一。对于实现 ICollection 的类,要序列化的值将从索引的 Item 属性中检索,

于 2012-08-09T07:46:34.857 回答