Laden...

Xml Serialize Problem

Erstellt von Samba vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.610 Views
S
Samba Themenstarter:in
14 Beiträge seit 2007
vor 17 Jahren
Xml Serialize Problem

Hi Leute,

also folgendes: Ich hab mit der xsd.exe eine Klasse aus einem XML
File erstellen lassen und das einlesen funktioniert einwandfrei.

Will ich jetzt aber das ganze mit der Serialize() Methode wieder raus-
schiessen steht nach der Zeile

<? xml version="1.0"?>

folgendes:

<ArrayOfPatientenPatient xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<PatientenPatient>

Dies will ich aber dort nicht haben. Ich will ArrayOfPatient garned dort haben und eigentlich sollte dort <Patienten> <Patient> stehen und ned in einem!!

Das is meine Klasse:


//------------------------------------------------------------------------------
// <auto-generated>
//     Dieser Code wurde von einem Tool generiert.
//     Laufzeitversion:2.0.50727.42
//
//     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
//     der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------

using System.Xml.Serialization;

// 
// Dieser Quellcode wurde automatisch generiert von xsd, Version=2.0.50727.42.
// 


/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class Patienten {
    
    private PatientenPatient[] patientField;
    
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("Patient")]
    public PatientenPatient[] Patient {
        get {
            return this.patientField;
        }
        set {
            this.patientField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class PatientenPatient {
    
    private ushort patientennummerField;
    
    private string notizField;
    
    private PatientenPatientMedikament[] medikamenteField;
    
    /// <remarks/>
    public ushort Patientennummer {
        get {
            return this.patientennummerField;
        }
        set {
            this.patientennummerField = value;
        }
    }
    
    /// <remarks/>
    public string Notiz {
        get {
            return this.notizField;
        }
        set {
            this.notizField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlArrayItemAttribute("Medikament", IsNullable=false)]
    public PatientenPatientMedikament[] Medikamente {
        get {
            return this.medikamenteField;
        }
        set {
            this.medikamenteField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class PatientenPatientMedikament {
    
    private uint pharmanummerField;
    
    private string kurztextField;
    
    private byte packungsanzahlField;
    
    private string dosierungField;
    
    /// <remarks/>
    public uint Pharmanummer {
        get {
            return this.pharmanummerField;
        }
        set {
            this.pharmanummerField = value;
        }
    }
    
    /// <remarks/>
    public string Kurztext {
        get {
            return this.kurztextField;
        }
        set {
            this.kurztextField = value;
        }
    }
    
    /// <remarks/>
    public byte Packungsanzahl {
        get {
            return this.packungsanzahlField;
        }
        set {
            this.packungsanzahlField = value;
        }
    }
    
    /// <remarks/>
    public string Dosierung {
        get {
            return this.dosierungField;
        }
        set {
            this.dosierungField = value;
        }
    }
}

Das ist der Code für die Serialisierung:


    public static bool ExportPatientenDatei(PatientenPatient[] patMedikamente, string xmlDatei)
    {
        try
        {
            System.Xml.Serialization.XmlSerializer serializer =
                new System.Xml.Serialization.XmlSerializer(typeof(Patienten));
            //System.IO.FileStream fs = new System.IO.FileStream(xmlDatei, System.IO.FileMode.Create);
            System.Xml.XmlTextWriter m_xmlWriter = new System.Xml.XmlTextWriter(xmlDatei, null);
            serializer.Serialize(m_xmlWriter, patMedikamente);

            return true;
        }
        catch
        {
            return false;
        }
    }

Bitte helft mir, vielen dank bereits im Vorraus!

Mfg,

Samba

L
667 Beiträge seit 2004
vor 17 Jahren

Hallo samba, ich glaube nicht, dass Du da eine Chance hast mit dem Serializer. Wenn Du Dein Patienten-Objekt serialisierst, dann muss eben die Member-Variable "patientField", die vom Typ "ArrayOfPatientenPatient" ist so weggeschrieben werden.

"It is not wise to be wise" - Sun Tzu

S
8.746 Beiträge seit 2005
vor 17 Jahren

Ein Wunder, dass dir der Serializer nicht um die Ohren fliegt:

Du serialisiert typeof(Patienten), gibst dem Serializer aber PatientenPatient[] zu füttern.

S
Samba Themenstarter:in
14 Beiträge seit 2007
vor 17 Jahren

Original von svenson
Ein Wunder, dass dir der Serializer nicht um die Ohren fliegt:

Du serialisiert typeof(Patienten), gibst dem Serializer aber PatientenPatient[] zu füttern.

Hmmm.. danke für eure schnellen Antworten. Das ich typeof(PatientenPatient) schreib hab ich auch schon mal probiert, funktioniert aber trotzdem ned!

Also meint ihr nicht das ich das ArrayOf wegbekomme??

Weil die Klasse hab ich aus folgender XML Struktur erstellen lassen:


<?xml version="1.0" encoding="ISO-8859-1"?>
<Patienten>
	<Patient>
		<Patientennummer>2955</Patientennummer>
		<Notiz>ululul</Notiz>
    <Medikamente>
      <Medikament>
       <Pharmanummer>3582</Pharmanummer>
		   <Kurztext>Aprednilson 58989 mg</Kurztext>
		   <Packungsanzahl>1</Packungsanzahl>
		    <Dosierung>5-4-9</Dosierung>
      </Medikament>
      <Medikament>		
       <Pharmanummer>35823</Pharmanummer>
		    <Kurztext>Aspirin 58989 mg</Kurztext>
		   <Packungsanzahl>3</Packungsanzahl>
		   <Dosierung>4-8-9</Dosierung>
    </Medikament>
	</Medikamente>
  </Patient>
	<Patient>
		<Patientennummer>2394</Patientennummer>
		<Notiz>heute früh gekommen </Notiz>
    <Medikamente>
      <Medikament>		
		   <Pharmanummer>458561</Pharmanummer>
		   <Kurztext>Aprednilson 5123 45 mg</Kurztext>
		   <Packungsanzahl>2</Packungsanzahl>
		    <Dosierung>5b5f5</Dosierung>
     </Medikament>
     <Medikament>		
		    <Pharmanummer>3523</Pharmanummer>
		    <Kurztext>Voltaren 58989 mg</Kurztext>
		    <Packungsanzahl>5</Packungsanzahl>
		    <Dosierung>5-4-9</Dosierung>
      </Medikament>
      <Medikament>		
	  	  <Pharmanummer>12322</Pharmanummer>
		    <Kurztext>Lovenox 58989 mg</Kurztext>
		    <Packungsanzahl>2</Packungsanzahl>
		    <Dosierung>5-4-9</Dosierung>
      </Medikament>
	  </Medikamente>
	</Patient>
</Patienten>

Und so möchte ich sie dann beim serialisieren auch wieder haben!!

Mfg,

Samba

T
512 Beiträge seit 2006
vor 17 Jahren

Du solltest den XmlSerializer mit typeof(Patienten) erstellen, und dem dann auch ein Objekt vom Typ Patienten geben.

e.f.q.

Aus Falschem folgt Beliebiges

S
Samba Themenstarter:in
14 Beiträge seit 2007
vor 17 Jahren

Naja, ich hab eben einen Serializer vom Typ typeof(PatientenPatient) erstellt und ihm eine PatientenPatient[] übergeben, das müsste dann ja auch funktionieren.

Ich will nur das danch das gleiche XML File, wie in einem meiner Posts zuvor rauskommt ausser das ein paar Datensätze, in meinem Fall Medikamente, dazugekommen sind.

Mfg,

Silvo

S
8.746 Beiträge seit 2005
vor 17 Jahren

Original von Samba
...das müsste dann ja auch funktionieren.

Nachdem nun schon 2 Leute geschrieben, dass das der Grund ist, warum es NICHT funktioniert... nunja.

Der Typ der beim Erzeugung des XmlSerializers angeben wird, muss identisch mit dem Typ sein, der serialisiert werden soll. Das ist nicht der Fall.

T
512 Beiträge seit 2006
vor 17 Jahren

Original von Samba
Naja, ich hab eben einen Serializer vom Typ typeof(PatientenPatient) erstellt und ihm eine PatientenPatient[] übergeben, das müsste dann ja auch funktionieren.

Nein müsste es nicht. Der Serializer den du so erstellst, serialisiert ArrayOfPatientenPatient, eben ein allgemeines Schema für ein Array. Du möchtest ein ganz spezielles Schema in der Ausgabe haben. Dieses spezielle Schema wird von der Klasse Patienten umgesetzt. Es ist wenig verwunderlich, dass nicht dieses spezielle Schema rauskommt, wenn du die darauf zugeschnittene Klasse nicht benutzt.

e.f.q.

Aus Falschem folgt Beliebiges