Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de Serialisation XML d'une collection

4 réponses
Avatar
Alexandre
Bonjour.

je sollicite votre aide pour un problème de sérialisation XML
j'ai créer une Class dérivé de l'interface ICollection.
j'arrive à la sérialiser sans aucun problème sauf si les Objets que
contient cette collection sont aussi des collections.
je me retrouve avec une exception dont le message est: Le type
testXmlSerialization.ClassCollection ne peut être utilisé dans ce contexte.

je me permet de vous donner le code source pour une meilleur
compréhension de mon problème.

merci pour vos réponse.

private void Sauvegarde()
{
ClassCollection Collection = new ClassCollection();
ClassCollection SubCollection = new ClassCollection();
Collection.Add(SubCollection);

try
{
System.Xml.Serialization.XmlSerializer Serializer = new
System.Xml.Serialization.XmlSerializer(typeof(ClassCollection));
System.IO.TextWriter writer = new System.IO.StreamWriter("Data.xml");
Serializer.Serialize(writer, Collection);
writer.Close();
}
catch(System.InvalidOperationException ioe)
{
Debug.WriteLine(ioe.InnerException.Message);
}
}



public class ClassBase: object
{
public string Name;
public ClassBase()
{
Name = "Test Name";
}
}

public class ClassCollection: ClassBase,System.Collections.ICollection
{
public ClassCollection()
{
}
private System.Collections.ArrayList empArray = new
System.Collections.ArrayList();

public ClassBase this[int index]
{
get{return (ClassBase) empArray[index];}
}

public void CopyTo(Array a, int index)
{
empArray.CopyTo(a, index);
}
public int Count
{
get{return empArray.Count;}
}
public object SyncRoot
{
get{return this;}
}
public bool IsSynchronized
{
get{return false;}
}
public System.Collections.IEnumerator GetEnumerator()
{
return empArray.GetEnumerator();
}
public void Add(ClassBase Obj)
{
empArray.Add(Obj);
}
}

4 réponses

Avatar
Simon Mourier [MS]
Changez la définition de ClassCollection en ceci:

[XmlInclude(typeof(ClassBase))]
public class ClassCollection: ClassBase,System.Collections.ICollection
{
public ClassCollection()
{
}
private System.Collections.ArrayList empArray = new
System.Collections.ArrayList();

public void Add(object o)
{
empArray.Add(o);
}

public object this[int index]
{
get{return empArray[index];}
}
... etc...

La sérialisation XML est parfois tatillonne...
Simon.

"Alexandre" a écrit dans le message de news:
423dc12a$0$14211$
Bonjour.

je sollicite votre aide pour un problème de sérialisation XML
j'ai créer une Class dérivé de l'interface ICollection.
j'arrive à la sérialiser sans aucun problème sauf si les Objets que
contient cette collection sont aussi des collections.
je me retrouve avec une exception dont le message est: Le type
testXmlSerialization.ClassCollection ne peut être utilisé dans ce
contexte.

je me permet de vous donner le code source pour une meilleur compréhension
de mon problème.

merci pour vos réponse.

private void Sauvegarde()
{
ClassCollection Collection = new ClassCollection();
ClassCollection SubCollection = new ClassCollection();
Collection.Add(SubCollection);

try
{
System.Xml.Serialization.XmlSerializer Serializer = new
System.Xml.Serialization.XmlSerializer(typeof(ClassCollection));
System.IO.TextWriter writer = new System.IO.StreamWriter("Data.xml");
Serializer.Serialize(writer, Collection);
writer.Close();
}
catch(System.InvalidOperationException ioe)
{
Debug.WriteLine(ioe.InnerException.Message);
}
}



public class ClassBase: object
{
public string Name;
public ClassBase()
{
Name = "Test Name";
}
}

public class ClassCollection: ClassBase,System.Collections.ICollection
{
public ClassCollection()
{
}
private System.Collections.ArrayList empArray = new
System.Collections.ArrayList();

public ClassBase this[int index]
{
get{return (ClassBase) empArray[index];}
}

public void CopyTo(Array a, int index)
{
empArray.CopyTo(a, index);
}
public int Count
{
get{return empArray.Count;}
}
public object SyncRoot
{
get{return this;}
}
public bool IsSynchronized
{
get{return false;}
}
public System.Collections.IEnumerator GetEnumerator()
{
return empArray.GetEnumerator();
}
public void Add(ClassBase Obj)
{
empArray.Add(Obj);
}
}



Avatar
Alexandre
Merci monsieur Mourier pour votre réponse mais malgré l'ajout de
[XmlInclude(typeof(ClassBase))]. j'obtiens toujours la même exception.
Auriez-vous une autre idée?

Simon Mourier [MS] a écrit :
Changez la définition de ClassCollection en ceci:

[XmlInclude(typeof(ClassBase))]
public class ClassCollection: ClassBase,System.Collections.ICollection
{
public ClassCollection()
{
}
private System.Collections.ArrayList empArray = new
System.Collections.ArrayList();

public void Add(object o)
{
empArray.Add(o);
}

public object this[int index]
{
get{return empArray[index];}
}
... etc...

La sérialisation XML est parfois tatillonne...
Simon.

"Alexandre" a écrit dans le message de news:
423dc12a$0$14211$

Bonjour.

je sollicite votre aide pour un problème de sérialisation XML
j'ai créer une Class dérivé de l'interface ICollection.
j'arrive à la sérialiser sans aucun problème sauf si les Objets que
contient cette collection sont aussi des collections.
je me retrouve avec une exception dont le message est: Le type
testXmlSerialization.ClassCollection ne peut être utilisé dans ce
contexte.

je me permet de vous donner le code source pour une meilleur compréhension
de mon problème.

merci pour vos réponse.

private void Sauvegarde()
{
ClassCollection Collection = new ClassCollection();
ClassCollection SubCollection = new ClassCollection();
Collection.Add(SubCollection);

try
{
System.Xml.Serialization.XmlSerializer Serializer = new
System.Xml.Serialization.XmlSerializer(typeof(ClassCollection));
System.IO.TextWriter writer = new System.IO.StreamWriter("Data.xml");
Serializer.Serialize(writer, Collection);
writer.Close();
}
catch(System.InvalidOperationException ioe)
{
Debug.WriteLine(ioe.InnerException.Message);
}
}



public class ClassBase: object
{
public string Name;
public ClassBase()
{
Name = "Test Name";
}
}

public class ClassCollection: ClassBase,System.Collections.ICollection
{
public ClassCollection()
{
}
private System.Collections.ArrayList empArray = new
System.Collections.ArrayList();

public ClassBase this[int index]
{
get{return (ClassBase) empArray[index];}
}

public void CopyTo(Array a, int index)
{
empArray.CopyTo(a, index);
}
public int Count
{
get{return empArray.Count;}
}
public object SyncRoot
{
get{return this;}
}
public bool IsSynchronized
{
get{return false;}
}
public System.Collections.IEnumerator GetEnumerator()
{
return empArray.GetEnumerator();
}
public void Add(ClassBase Obj)
{
empArray.Add(Obj);
}
}








Avatar
Alexandre
Merci monsieur Mourier pour votre réponse mais malgré l'ajout de
[XmlInclude(typeof(ClassBase))]. j'obtiens toujours la même exception.
Auriez-vous une autre idée?

Simon Mourier [MS] a écrit :
Changez la définition de ClassCollection en ceci:

[XmlInclude(typeof(ClassBase))]
public class ClassCollection: ClassBase,System.Collections.ICollection
{
public ClassCollection()
{
}
private System.Collections.ArrayList empArray = new
System.Collections.ArrayList();

public void Add(object o)
{
empArray.Add(o);
}

public object this[int index]
{
get{return empArray[index];}
}
... etc...

La sérialisation XML est parfois tatillonne...
Simon.

"Alexandre" a écrit dans le message de news:
423dc12a$0$14211$

Bonjour.

je sollicite votre aide pour un problème de sérialisation XML
j'ai créer une Class dérivé de l'interface ICollection.
j'arrive à la sérialiser sans aucun problème sauf si les Objets que
contient cette collection sont aussi des collections.
je me retrouve avec une exception dont le message est: Le type
testXmlSerialization.ClassCollection ne peut être utilisé dans ce
contexte.

je me permet de vous donner le code source pour une meilleur compréhension
de mon problème.

merci pour vos réponse.

private void Sauvegarde()
{
ClassCollection Collection = new ClassCollection();
ClassCollection SubCollection = new ClassCollection();
Collection.Add(SubCollection);

try
{
System.Xml.Serialization.XmlSerializer Serializer = new
System.Xml.Serialization.XmlSerializer(typeof(ClassCollection));
System.IO.TextWriter writer = new System.IO.StreamWriter("Data.xml");
Serializer.Serialize(writer, Collection);
writer.Close();
}
catch(System.InvalidOperationException ioe)
{
Debug.WriteLine(ioe.InnerException.Message);
}
}



public class ClassBase: object
{
public string Name;
public ClassBase()
{
Name = "Test Name";
}
}

public class ClassCollection: ClassBase,System.Collections.ICollection
{
public ClassCollection()
{
}
private System.Collections.ArrayList empArray = new
System.Collections.ArrayList();

public ClassBase this[int index]
{
get{return (ClassBase) empArray[index];}
}

public void CopyTo(Array a, int index)
{
empArray.CopyTo(a, index);
}
public int Count
{
get{return empArray.Count;}
}
public object SyncRoot
{
get{return this;}
}
public bool IsSynchronized
{
get{return false;}
}
public System.Collections.IEnumerator GetEnumerator()
{
return empArray.GetEnumerator();
}
public void Add(ClassBase Obj)
{
empArray.Add(Obj);
}
}








Avatar
Simon Mourier [MS]
Regardez bien l'ensemble de ma réponse, pas seulement l'XmlInclude
Simon.

"Alexandre" a écrit dans le message de news:
423ef661$0$32510$
Merci monsieur Mourier pour votre réponse mais malgré l'ajout de
[XmlInclude(typeof(ClassBase))]. j'obtiens toujours la même exception.
Auriez-vous une autre idée?

Simon Mourier [MS] a écrit :
Changez la définition de ClassCollection en ceci:

[XmlInclude(typeof(ClassBase))]
public class ClassCollection: ClassBase,System.Collections.ICollection
{
public ClassCollection()
{
}
private System.Collections.ArrayList empArray = new
System.Collections.ArrayList();

public void Add(object o)
{
empArray.Add(o);
}

public object this[int index]
{
get{return empArray[index];}
}
... etc...

La sérialisation XML est parfois tatillonne...
Simon.

"Alexandre" a écrit dans le message de news:
423dc12a$0$14211$

Bonjour.

je sollicite votre aide pour un problème de sérialisation XML
j'ai créer une Class dérivé de l'interface ICollection.
j'arrive à la sérialiser sans aucun problème sauf si les Objets que
contient cette collection sont aussi des collections.
je me retrouve avec une exception dont le message est: Le type
testXmlSerialization.ClassCollection ne peut être utilisé dans ce
contexte.

je me permet de vous donner le code source pour une meilleur
compréhension de mon problème.

merci pour vos réponse.

private void Sauvegarde()
{
ClassCollection Collection = new ClassCollection();
ClassCollection SubCollection = new ClassCollection();
Collection.Add(SubCollection);

try
{
System.Xml.Serialization.XmlSerializer Serializer = new
System.Xml.Serialization.XmlSerializer(typeof(ClassCollection));
System.IO.TextWriter writer = new System.IO.StreamWriter("Data.xml");
Serializer.Serialize(writer, Collection);
writer.Close();
}
catch(System.InvalidOperationException ioe)
{
Debug.WriteLine(ioe.InnerException.Message);
}
}



public class ClassBase: object
{
public string Name;
public ClassBase()
{
Name = "Test Name";
}
}

public class ClassCollection: ClassBase,System.Collections.ICollection
{
public ClassCollection()
{
}
private System.Collections.ArrayList empArray = new
System.Collections.ArrayList();

public ClassBase this[int index]
{
get{return (ClassBase) empArray[index];}
}

public void CopyTo(Array a, int index)
{
empArray.CopyTo(a, index);
}
public int Count
{
get{return empArray.Count;}
}
public object SyncRoot
{
get{return this;}
}
public bool IsSynchronized
{
get{return false;}
}
public System.Collections.IEnumerator GetEnumerator()
{
return empArray.GetEnumerator();
}
public void Add(ClassBase Obj)
{
empArray.Add(Obj);
}
}