IXMLSerializable mit Standard ReadXML/WriteXML mischen



  • Hallo,

    ich habe in meiner Klasse die IXMLSerializable Schnittstelle implementiert. Möchte dabei aber eigentlich nur die ReadXML Methode neu implementieren. Gibt es eine Möglichkeit, dass ich aus meiner Klasse eine Standard WriteXML Methode benutze? Wie geht das, wenn ja?

    Die ReadXML möchte ich selber implementieren, weil sich im Lauf der Zeit die Klasse geändert hat aber trotzdem noch alte XML Files in die Klasse eingelesen werden können sollen. Allerdings möchte ich nur einen Wert (siehe Code val3) selbst behandeln, die anderen Werte könnten eigentlich auch wieder per Standard ReadXML ausgelesen werden. Gibts da auch eine andere Möglichkeit?

    Für Hilfe wäre ich dankbar 🙂

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Schema;
    using System.Xml.Serialization;
    using System.IO;
    
    namespace IXMLSerializableTest {
        public class myClass2 : IXmlSerializable {
    
            private int _val1;
            private int _val2;
            private int _val3;
    
            public myClass2() {
                _val1 = 0;
                _val2 = 0;
                _val3 = 0;
            }
    
            public XmlSchema GetSchema() {
                return null;
            }
    
            public void ReadXml(XmlReader reader) {
                reader.ReadStartElement();
    
                while (!reader.IsEmptyElement && (reader.NodeType != XmlNodeType.EndElement)) {
                    if (reader.Name == "val2") {
                        val2 = Convert.ToInt32(reader.ReadElementString());
                    } else if (reader.Name == "val3") {
                        string tmp = reader.ReadElementString();
    
                        try{
                            val3 = int.Parse(tmp);
                        }catch{
                            if(tmp == "true"){
                                val3 = 1;
                            } else {
                                val3 = 0;
                            }
                        }
                    } else if (reader.Name == "val1") {
                        val1 = Convert.ToInt32(reader.ReadElementString());
                    } 
                }
    
                reader.Close();
            }
    
            public void WriteXml(XmlWriter writer) {
                writer.WriteElementString("val1", val1.ToString());
                writer.WriteElementString("val2", val2.ToString());
                writer.WriteElementString("val3", val3.ToString());
            }
    
            public int val1 {
                get { return _val1; }
                set { _val1 = value; }
            }
    
            public int val2 {
                get { return _val2; }
                set { _val2 = value; }
            }
    
            public int val3 {
                get { return _val3; }
                set { _val3 = value; }
            }
    
            public override string ToString() {
                return "Val1: " + _val1.ToString() + " Val2: " + _val2.ToString() + " Val3: " + _val3.ToString();
            }
        }
    }
    


  • Sag mal, was laberst Du den da?
    Glaubst Du das selber was Du da erzählst?
    Geht es noch etwas verwirrender?

    Gruß

    Helge



  • Um das was Hurrelbrink gesagt hat, mal etwas netter zu formulieren.

    Wenn du ein Interface implementierst bist du gezwungen die Methoden darin zu implementieren, du kannst zwar die Methoden leer lassen die du nicht implementieren musst/willst aber das führt am Ziel vorbei.
    Die Frage ist eher: Was willst du erreichen? Auf jedenfall willst du was mit XML-Serialisieren, aber warum machst du das nich über Linq-To-XML?


Anmelden zum Antworten