2016-08-25 1 views
0

J'ai ce modèle de données:Impossible sérialisation collection de collections

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); 
     } 
    } 

J'utilise IEnumerable dans ma collection avec la fonction Ajouter() pour lui sérialisation automatiquement la collecte, mais lorsque je tente de lui sérialisation 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); 
     } 

J'ai eu l'étrange erreur sans information nécessaire:

le type 'MaCollection' ne peut être u sed dans ce contexte

Mais, si je vais utiliser au lieu de la classe MyCollection MyItem<T> avec la valeur de l'élément typé - il n'y aura pas d'erreurs. Donc c'est ok avec les collections dactylographiées, la classe abstraite et ainsi de suite, mais pas avec la collection de collections.

Comment puis-je résoudre ce problème?

+0

J'ai essayé de stocker MyCollections en tant que public readonly List ListOfCollections = new Liste () 'et utilisez' XmlArray ', mais cela n'a pas aidé. J'ai eu la même erreur. –

Répondre

0

Et j'ai trouvé un problème. Pour le faire fonctionner, nous devons faire hériter AbstractCollection de IEnumerable. Et c'est très compréhensible.