Gegeben das folgende XML:
<?xml version="1.0"?>
<user_list>
<user>
<id>1</id>
<name>Joe</name>
</user>
<user>
<id>2</id>
<name>John</name>
</user>
</user_list>
Und die folgende Klasse:
public class User {
[XmlElement("id")]
public Int32 Id { get; set; }
[XmlElement("name")]
public String Name { get; set; }
}
Ist es möglich, XmlSerializer
die XML in eine zu deserialisieren List<User>
? Wenn ja, welche Art von zusätzlichen Attributen muss ich verwenden oder welche zusätzlichen Parameter muss ich zum Erstellen der XmlSerializer
Instanz verwenden?
Ein Array ( User[]
) wäre akzeptabel, wenn es etwas weniger vorzuziehen wäre.
c#
serialization
xml-serialization
xml-deserialization
Daniel Schaffer
quelle
quelle
.Items
Mitglied tun .Wenn Sie die
User
Klasse mit dem dekorieren, dasXmlType
der erforderlichen Großschreibung entspricht:Dann kann der
XmlRootAttribute
on theXmlSerializer
ctor die gewünschte Wurzel bereitstellen und das direkte Einlesen in List <> ermöglichen:...
Gutschrift: basierend auf der Antwort von YK1 .
quelle
XmlSerializer
muss der statisch zwischengespeichert und wiederverwendet werden, um einen schwerwiegenden Speicherverlust zu vermeiden. Weitere Informationen finden Sie unter Speicherverlust mit StreamReader und XmlSerializer .Ja, eine Liste wird serialisiert und deserialisiert <>. Stellen Sie einfach sicher, dass Sie im Zweifelsfall das Attribut [XmlArray] verwenden.
Dies funktioniert sowohl mit Serialize () als auch mit Deserialize ().
quelle
Ich glaube, ich habe einen besseren Weg gefunden. Sie müssen keine Attribute in Ihre Klassen einfügen. Ich habe zwei Methoden für die Serialisierung und Deserialisierung erstellt, bei denen die generische Liste als Parameter verwendet wird.
Schau mal (es funktioniert bei mir):
So können Sie jede gewünschte Liste serialisieren! Sie müssen den Listentyp nicht jedes Mal angeben.
quelle
List<MyClass>
das Dokument Element benannt werden sollteArrayOfMyClass
.Ja, es wird in List <> deserialisiert. Sie müssen es nicht in einem Array aufbewahren und in eine Liste einschließen / einkapseln.
Deserialisierungscode,
quelle
Ich bin mir nicht sicher über List <T>, aber Arrays sind auf jeden Fall machbar. Und ein bisschen Magie macht es wirklich einfach, wieder zu einer Liste zu gelangen.
quelle
Wie wäre es mit
Nicht besonders schick, aber es sollte funktionieren.
quelle