2

IListwith Children 要素を含むオブジェクトをシリアライズしようとしています。はIList非ジェネリックであり、ジェネリックで作成することはできません。「The Type MyObjectChild was not expected. ...」のような例外が発生し、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 を実装するクラスは、1 つのパラメーターを受け取るパブリックな Add メソッドを実装する必要があります。Add メソッドのパラメーターは、GetEnumerator から返される値の Current プロパティから返されるものと同じ型、またはその型のベースの 1 つでなければなりません。IEnumerable に加えて ICollection (CollectionBase など) を実装するクラスには、整数を受け取るパブリック Item インデックス プロパティ (C# のインデクサー) と、整数型のパブリック Count プロパティが必要です。Add メソッドのパラメーターは、Item プロパティから返される型と同じ型か、その型のベースの 1 つでなければなりません。ICollection を実装するクラスの場合、シリアル化される値は、インデックス付きの Item プロパティから取得されます。

于 2012-08-09T07:46:34.857 に答える