Autor Beitrag
Bex
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 47

Win XP, Linux
C# (VS 2008), Java (Eclipse)
BeitragVerfasst: Mi 24.06.09 09:56 
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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
mydata xmldoc = new mydata();          // xml-Schema-Struktur
xmldoc.header = new header();
xmldoc.header.date = DateTime.Now;       // Datum
xmldoc.header.description = "Testdaten"// String
xmldoc.header.primaryKey = primaryKey;   // uint
...
// Datei schreiben
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 47

Win XP, Linux
C# (VS 2008), Java (Eclipse)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 47

Win XP, Linux
C# (VS 2008), Java (Eclipse)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 47

Win XP, Linux
C# (VS 2008), Java (Eclipse)
BeitragVerfasst: Mi 24.06.09 11:40 
Jetzt habe ich einen Unterschied entdeckt: der automatik-aus-xsd-mache-Klassen-Mechanismus hat folgendes angefügt:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 47

Win XP, Linux
C# (VS 2008), Java (Eclipse)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 25.06.09 08:14 
Ich denke die Antwort findest du in der Doku von XSD.EXE :)
xor
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 07.07.09 18:41 
Ich hab die Erklärung zu dem merkwürdigen Specified-Dings gefunden: codekicker.de/fragen...-mit-XmlSerializer/6
Bex Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 47

Win XP, Linux
C# (VS 2008), Java (Eclipse)
BeitragVerfasst: Mi 12.08.09 09:36 
Danke schön! Das war genau die Erklärung, die ich gesucht habe. :-)