Entwickler-Ecke
IO, XML und Registry - XML Serialisierung - uint wird nicht geschrieben
Bex - Mi 24.06.09 09:56
Titel: XML Serialisierung - uint wird nicht geschrieben
Moin,
leider finde ich weder über "Freund MetaGer" noch über die Forensuche einen Tipp, wie man das Problem beheben kann, das mich gerade umtreibt:
ich möchte Objekte einer XML-Struktur, welche aus einer XSD generiert wurde, nach Veränderungen wieder als XML-File speichern. Dafür benutze ich den XMLSerializer. Mein Problem ist, dass im erzeugten File zwar die Datums- und String-Werte korrekt drin stehen, aber die Integer-Werte fehlen (auch die Tags tauchen nicht auf).
Beispiel:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| mydata xmldoc = new mydata(); xmldoc.header = new header(); xmldoc.header.date = DateTime.Now; xmldoc.header.description = "Testdaten"; xmldoc.header.primaryKey = primaryKey; ... FileStream fs = new FileStream(testdatenpfad + @"\test.xml", FileMode.Create); try { XmlSerializer xmlSerializer = new XmlSerializer(typeof(mydata)); xmlSerializer.Serialize(fs, xmldoc); } finally { fs.Close(); } |
In der Datei erzeugt mein Programm nur folgendes:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| <?xml version="1.0"?> <mydata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <header> <date>2009-06-24T07:38:56.2815154+02:00</date> <description>Testdaten</description> </header> <content> </content> </mydata> |
Ich stehe leider auf dem Schlauch, hat jemand eine Idee?
danielf - Mi 24.06.09 10:21
Hallo,
kannst du bitte die "header"- und "mydata"-Klasse mal zeigen?
Ich hab es bei mir gerade mal nachgestellt und ich hab kein Problem mit dem uint. Vermute aber, dass du manche Schritte manuel machst und dort ein Fehler ist.
Gruß Daniel
Bex - Mi 24.06.09 11:11
Die "mydata"-Klasse ist riesengroß, wie gesagt, sie wurde aus einer XSD-Definition automatisch erzeugt - manuell mache ich beim Erzeugen dieser Typen gar nichts. "header" ist eine Unterklasse davon.
Hast Du das auch mit automatisch erzeugten Klassen probiert oder diese selbst definiert?
danielf - Mi 24.06.09 11:15
Ich habe eine Testklasse selber erzeugt. Hab auch mal mit den Sichtbarkeiten rumgespielt. Wenn ich zum Beispiel einen Property auf internal setze, kann ich ihn zwar wie in deinem Beispiel extern setzen, er wird aber nicht mit dem XmlSerializer serialisiert. Vlt. liegt bei dir sowas vor.
Bex - Mi 24.06.09 11:30
Jetzt hab' ich spaßeshalber auch mal die gleiche Struktur selbst erzeugt (mit kleinen Unterschieden), uns schon läuft's -- liegt wohl an der automatischen Erzeugung via XSD, tippe ich.
Bex - Mi 24.06.09 11:40
Jetzt habe ich einen Unterschied entdeckt: der automatik-aus-xsd-mache-Klassen-Mechanismus hat folgendes angefügt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| [System.Xml.Serialization.XmlIgnoreAttribute()] public bool primaryKeySpecified { get { return this.primaryKeyFieldSpecified; } set { this.primaryKeyFieldSpecified = value; } } |
Wenn ich das in mein "händisches" Programm aufnehme, fehlt die Zeile auch - obwohl ich einen Wert festgelegt habe... wofür ist so ein Feld wohl gut?
danielf - Mi 24.06.09 14:31
Hmm.. vlt. für interne Verarbeitungen wie zum Beispiel suchen etc. wer weiß schon was die Routine "automatik-aus-xsd-mache-Klasse-Mechanismus" tut :)
Bist du dir sicher, dass du dieses Feld benötigst? (Wenn es von dem Mechanismus eine "Hilfsvariable" ist dann wohl nicht)
Bex - Do 25.06.09 07:47
Danke erstmal für die Hilfe - sie hat mich auf die richtige Spur gebracht! :-)
Ich bekomme die XSD leider von einer anderen Abteilung vorgegeben und habe keinen Einfluss darauf, was die da definieren; mit dem XSD.EXE mache ich dann die Klassen daraus, die ich in meinem Projekt verwende ... da sich die XSD noch verändern kann, will ich da nicht manuell was drin ändern.
Nur eine Vermutung: kann es sein, dass optionale Felder mit so einer Booleschen Variable realisiert werden?
danielf - Do 25.06.09 08:14
Ich denke die Antwort findest du in der Doku von XSD.EXE :)
Bex - Mi 12.08.09 09:36
Danke schön! Das war genau die Erklärung, die ich gesucht habe. :-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!