Puis-je sérialiser une liste générique des objets sérialisables sans avoir à préciser leur type.
Quelque chose comme de l'intention à l'origine de la brisure de code ci-dessous:
List<ISerializable> serializableList = new List<ISerializable>();
XmlSerializer xmlSerializer = new XmlSerializer(serializableList.GetType());
serializableList.Add((ISerializable)PersonList);
using (StreamWriter streamWriter = System.IO.File.CreateText(fileName))
{
xmlSerializer.Serialize(streamWriter, serializableList);
}
Edit:
Pour ceux qui voulaient connaître le détail: lorsque j'essaie d'exécuter ce code, les erreurs sur le XMLSerializer[...] ligne avec:
Impossible de sérialiser le Système d'interface.Moment de l'exécution.La sérialisation.ISerializable.
Si je change d' List<object>
- je obtenir de l' "There was an error generating the XML document."
. Le InnerException détail est - "{"The type System.Collections.Generic.List1[[Project1.Person, ConsoleFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] may not be used in this context."}"
La personne objet est défini comme suit:
[XmlRoot("Person")]
public class Person
{
string _firstName = String.Empty;
string _lastName = String.Empty;
private Person()
{
}
public Person(string lastName, string firstName)
{
_lastName = lastName;
_firstName = firstName;
}
[XmlAttribute(DataType = "string", AttributeName = "LastName")]
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
[XmlAttribute(DataType = "string", AttributeName = "FirstName")]
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
}
Le PersonList est juste un List<Person>
.
C'est juste pour le test, donc ne vous sentez pas à l'détails étaient trop importantes. La clé est que j'ai un ou plusieurs objets différents, qui sont tous des serializable. Je veux sérialiser tous à un seul fichier. J'ai pensé que la meilleure façon de faire c'est de les mettre dans une liste générique et sérialiser la liste en une seule fois. Mais cela ne fonctionne pas.
J'ai essayé avec List<IXmlSerializable>
, mais qui échoue avec
System.Xml.Serialization.IXmlSerializable cannot be serialized because it does not have a parameterless constructor.
Désolé pour le manque de détail, mais je suis un débutant et ne sais pas ce détail est nécessaire. Il serait utile si les gens demandent pour plus de détails essayé de répondre d'une manière qui ne me laisserait comprendre quels sont les renseignements requis, ou une réponse indiquant les directions possibles.
Aussi merci pour les deux réponses que j'ai obtenu jusqu'à présent - je pourrais avoir passé beaucoup plus de temps à lire sans arriver à ces idées. Il est incroyable de voir comment les gens utiles sont sur ce site.