xmlserializer eigene Objekte



  • Hi

    ich habe im Netz ein C# Codebeispiel gefunden das ich gern in C++ .net
    umschreiben würde. Leider klappt es nicht so wie ich will. Kann jemand helfen ?

    //.. using System.Xml.Serialization, System.IO;

    private void Form1_Load(object sender, System.EventArgs e)
    {
    Person[] personen = new Person[2]
    {new Person("Frank", 43), new Person("Rainer", 25)};
    PersonenSchreiben(personen); personen = null;
    personen = PersonenEinlesen();
    }

    static string dateiPfad = "personen.xml";
    static public Person[] PersonenEinlesen()
    {
    XmlSerializer serializer = new XmlSerializer(typeof(Person[]));
    TextReader tr = new StreamReader(dateiPfad);
    Person[] personen = (Person[])serializer.Deserialize(tr); tr.Close();
    return personen;
    }

    static public void PersonenSchreiben(Person[] personen)
    {
    XmlSerializer serializer = new XmlSerializer(typeof(Person[]));
    TextWriter tr = new StreamWriter(dateiPfad);
    serializer.Serialize(tr, personen); tr.Close();
    }

    public class Person
    {
    public Person(string name, int alter)
    {
    this.Name = name;
    this.Alter= alter;
    }

    public Person(){}
    private string name;
    public string Name
    {
    get{return name;}
    set{name= value;}
    }

    private int alter;
    public int Alter
    {
    get{return alter;}
    set{alter= value;}
    }
    }



  • Was klappt denn nicht? Zeig doch mal Deinen Versuch!



  • //die zu serialisierende Klasse:

    public ref class RC5_settings
    {
    public:
    RC5_settings(void);
    public:
    RC5_settings(int tastencode, int ausgang, int ausgang_status)
    {
    Tastencode = tastencode & 0x3F;
    Ausgang = ausgang & 0x3f;
    Ausgang_Status = ausgang_status & 0xff;
    };
    public:
    int Tastencode;
    int Ausgang;
    int Ausgang_Status;

    };

    private: array <RC5_settings^> ^rc5_set;
    rc5_set = gcnew array <RC5_settings^> (16);

    //per Tastendruck werden die 16 Instanzen initialisiert
    rc5_set[i] = gcnew RC5_settings(RX_CAN_MSG.DATA[1],RX_CAN_MSG.DATA[2],RX_CAN_MSG.DATA[3]);

    //soweit so gut

    String ^DateiPfad = "RC5_settings.xml";

    // und hier liegt mein Problem, der XMLSerializer weis nur die Klasse aufgebaut ist, aber nicht das ich 16mal das ganze
    // serialisieren will
    // mit einen Klassenojekt geht es einwandfrei

    // in C# schreibt man ja xmlSerializer(typeof(RC5_settings[]));

    XmlSerializer ^serializer = gcnew XmlSerializer(RC5_settings::typeid);

    TextWriter ^tr = gcnew StreamWriter(DateiPfad);

    // und hier serializer.Serialize(tr,rc5_set);
    serializer->Serialize(tr,rc5_set);
    tr->Close();


Anmelden zum Antworten