Kann ich eine generische Liste serialisierbarer Objekte serialisieren, ohne deren Typ angeben zu müssen?
So etwas wie die Absicht hinter dem kaputten Code unten:
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);
}
Bearbeiten:
Für diejenigen, die Details wissen wollten: Wenn ich versuche, diesen Code auszuführen, tritt in der XMLSerializer-Zeile [...] ein Fehler auf mit:
Schnittstelle System.Runtime.Serialization.ISerializable kann nicht serialisiert werden.
Wenn ich zu ändere, List<object>
bekomme ich "There was an error generating the XML document."
. Das InnerException-Detail ist"{"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."}"
Das Personenobjekt ist wie folgt definiert:
[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; }
}
}
Die PersonList ist nur eine List<Person>
.
Dies ist jedoch nur zum Testen gedacht, daher waren die Details nicht zu wichtig. Der Schlüssel ist, dass ich ein oder mehrere verschiedene Objekte habe, die alle serialisierbar sind. Ich möchte sie alle in eine Datei serialisieren. Ich dachte, der einfachste Weg, dies zu tun, wäre, sie in eine generische Liste aufzunehmen und die Liste auf einmal zu serialisieren. Das funktioniert aber nicht.
Ich habe es auch mit versucht List<IXmlSerializable>
, aber das scheitert mit
System.Xml.Serialization.IXmlSerializable cannot be serialized because it does not have a parameterless constructor.
Entschuldigen Sie den Mangel an Details, aber ich bin ein Anfänger und weiß nicht, welche Details erforderlich sind. Es wäre hilfreich, wenn Leute, die nach mehr Details fragen, versuchen würden, so zu antworten, dass ich verstehe, welche Details erforderlich sind, oder eine grundlegende Antwort mit möglichen Anweisungen.
Auch dank der beiden Antworten, die ich bisher erhalten habe, hätte ich viel mehr Zeit mit Lesen verbringen können, ohne diese Ideen zu bekommen. Es ist erstaunlich, wie hilfreich die Leute auf dieser Seite sind.