Riktig måte å implementere IXmlSerializable?

 C Programming >> C C# Program >  >> C#
Riktig måte å implementere IXmlSerializable?

Ja, GetSchema() skal returnere null.

For både lesing og skriving er objektelementet allerede skrevet, så du trenger ikke legge til et ytre element i skriving. For eksempel kan du bare begynne å lese/skrive attributter i de to.

For å skrive:

Og for lesing:

Jeg er enig i at det er litt uklart, men det koker ned til "det er din jobb å Read() endeelement-taggen til wrapperen".


Jeg skrev en artikkel om emnet med eksempler ettersom MSDN-dokumentasjonen nå er ganske uklar og eksemplene du kan finne på nettet er for det meste feilimplementert.

Fallgruvene er håndtering av lokaliteter og tomme elementer ved siden av det Marc Gravell allerede nevnte.

http://www.codeproject.com/KB/XML/ImplementIXmlSerializable.aspx


Ja, det hele er vel litt av et minefelt? Marc Gravell Svaret til dekker det stort sett, men jeg vil legge til at i et prosjekt jeg jobbet med fant vi det ganske vanskelig å måtte skrive det ytre XML-elementet manuelt. Det resulterte også i inkonsistente XML-elementnavn for objekter av samme type.

Vår løsning var å definere vår egen IXmlSerializable grensesnitt, avledet fra system en, som la til en metode kalt WriteOuterXml() . Som du kan gjette, vil denne metoden ganske enkelt skrive det ytre elementet, og deretter ringe WriteXml() , og skriv deretter slutten av elementet. Selvfølgelig ville ikke systemets XML-serialisering kalle denne metoden, så det var bare nyttig når vi gjorde vår egen serialisering, så det kan være nyttig i ditt tilfelle eller ikke. På samme måte la vi til en ReadContentXml() metode, som ikke leste det ytre elementet, bare innholdet.