Biorąc pod uwagę następujący kod 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>
I następująca klasa:
public class User {
[XmlElement("id")]
public Int32 Id { get; set; }
[XmlElement("name")]
public String Name { get; set; }
}
Czy można użyć XmlSerializer
do deserializacji XML do pliku List<User>
? Jeśli tak, jakiego typu dodatkowych atrybutów będę potrzebować lub jakich dodatkowych parametrów muszę użyć do skonstruowania XmlSerializer
instancji?
Tablica ( User[]
) byłaby dopuszczalna, choć nieco mniej preferowana.
c#
serialization
xml-serialization
xml-deserialization
Daniel Schaffer
źródło
źródło
.Items
członka.Jeśli ozdobisz
User
klasę znakiem,XmlType
aby dopasować wymaganą wielkość liter:Następnie
XmlRootAttribute
naXmlSerializer
ctor może podać żądany katalog główny i umożliwić bezpośredni odczyt do listy <>:...
Kredyt: na podstawie odpowiedzi z YK1 .
źródło
XmlSerializer
należy statycznie buforować i ponownie używać, aby uniknąć poważnego przecieku pamięci, zobacz wyciek pamięci przy użyciu StreamReader i XmlSerializer, aby uzyskać szczegółowe informacje.Tak, będzie serializować i deserializować List <>. W razie wątpliwości upewnij się tylko, że używasz atrybutu [XmlArray].
Działa to zarówno z Serialize (), jak i Deserialize ().
źródło
Myślę, że znalazłem lepszy sposób. Nie musisz umieszczać atrybutów w swoich klasach. Zrobiłem dwie metody serializacji i deserializacji, które przyjmują listę ogólną jako parametr.
Spójrz (u mnie działa):
Możesz więc serializować dowolną listę! Nie musisz za każdym razem określać typu listy.
źródło
List<MyClass>
elementu dokumentu należy nazwaćArrayOfMyClass
.Tak, deserializacja do List <>. Nie ma potrzeby trzymania go w tablicy i zawijania / hermetyzacji na liście.
Kod deserializacji,
źródło
Nie jestem pewien co do List <T>, ale tablice są z pewnością możliwe. Odrobina magii sprawia, że ponowne przejście do Listy jest naprawdę łatwe.
źródło
Co powiesz na
Niezbyt wyszukane, ale powinno działać.
źródło