2016-08-25 5 views
0

をシリアル化できません:は、私は、このデータのモデルを持っているコレクションのコレクション

public abstract class AbstractCollection 
    { 

    } 

    public abstract class TypedAbstractCollection<T1> : AbstractCollection 
    { 

    } 

    public class MyCollection<T> : TypedAbstractCollection<T>, IEnumerable<T> 
    { 
     private readonly List<T> _valueList = new List<T>(); 

     public IEnumerator<T> GetEnumerator() 
     { 
      return _valueList.GetEnumerator(); 
     } 

     IEnumerator IEnumerable.GetEnumerator() 
     { 
      return GetEnumerator(); 
     } 

     public void Add(T value) 
     { 
      _valueList.Add(value); 
     } 
    } 

    [XmlInclude(typeof(MyCollection<string>))] 
    public class Shallow : IEnumerable<AbstractCollection> 
    { 
     private readonly List<AbstractCollection> _listOfCollections = new List<AbstractCollection>(); 

     public IEnumerator<AbstractCollection> GetEnumerator() 
     { 
      return _listOfCollections.GetEnumerator(); 
     } 

     IEnumerator IEnumerable.GetEnumerator() 
     { 
      return GetEnumerator(); 
     } 

     public void Add(AbstractCollection sample) 
     { 
      _listOfCollections.Add(sample); 
     } 
    } 

私は自動的にコレクションとしてそれをシリアル化するには、[追加()関数で、私のコレクションにIEnumerableを使用しますが、私はそれをシリアル化しようとすると、 XML:私はすべての必要な情報がなくても奇妙なエラーを持っている

 Shallow shallow = new Shallow 
     { 
      new MyCollection<string> 
      { 
       "first", 
       "second" 
      } 
     }; 

     XmlSerializer formatter = new XmlSerializer(shallow.GetType(), 
      new[] { typeof(OneWayMapper<string, string>) }); 

     using (FileStream fs = new FileStream("data.xml", FileMode.OpenOrCreate)) 
     { 
      formatter.Serialize(fs, shallow); 
     } 

型 'MyCollection' Uがないかもしれませんこのコンテキストでsed

しかし、MyCollectionクラスMyItem<T>の代わりにタイプされた項目値を使用すると、エラーは発生しません。 だからではなく、コレクションのコレクションと、その上の型付きコレクション、抽象クラスとして大丈夫です。

どうすれば修正できますか?

+0

私は '公共の読み取り専用リスト ListOfCollections =新しいリスト()' とMyCollectionsを保存すると 'XmlArray' を使用しようとしたが、それは助けたdid't。私も同じエラーがありました。 –

答えて

0

そして、私は問題を発見しました。それを動作させるには、AbstractCollectionをIEnumerableから継承させる必要があります。 それはとても理解できます。

関連する問題