Announcement

Collapse
No announcement yet.

Serialisierung von einer von List geerbten Klasse

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Serialisierung von einer von List geerbten Klasse

    Hallo,

    ich habe eine Klasse, die von List erbt und um zwei zusätzliche Properties erweitert wurde. Nun möchte ich diese Klasse mit Hilfe des XmlSerializer serialisieren. Alle Elemente der List werden auch serialisiert nur fehlen meine beiden Properties?! Kann mir jemand helfen?

  • #2
    Hallo,

    zeig mal den Code deiner Klasse und den relevanten Teil des Serialierens.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Zeig ein wenig Code damit ich das Problem richtig verstehe. Normalerweise sollte der Serializer mit einer Exception aussteigen wenn man Typen nicht eindeutig spezifiziert. Also wenn du zum Beispiel den XMLSerializer mit typeof(List<MyClass>) initialisierst aber dann später irgendwelche Ableitungen von List oder MyClass verwendest die du dem Serializer nicht bekannt gemacht hast. Das da aber einfach ein anderer Typ serialisiert wird (auch wenn in Vererbungsbeziehung) ohne das es knallt ist eher ungewöhnlich.

      Comment


      • #4
        Die zu serialisierende Klasse enthält das SET:
        public class Configuration
        {
        #region Events
        #endregion

        #region Fields
        private bool _started=false;
        private bool _enabled;
        private Guid _id;
        private string _name;
        private Set _set;
        #endregion

        #region Properties
        public bool Started
        {
        get { return _started; }
        set
        {
        if (this._started == value)
        return;
        }
        }
        public bool Enabled
        {
        get { return _enabled; }
        set { _enabled = value; }
        }

        public Guid ID
        {
        get
        {
        if (_id == Guid.Empty) _id = Guid.NewGuid();
        return _id;
        }
        set { if (_id == Guid.Empty) _id = value; }
        }

        public string Name
        {
        get { return _name; }
        set { _name = value; }
        }

        public Set LinkItemSet
        {
        get { return _set; }
        set { _set = value; }
        }
        #endregion

        #region EventHandler
        #endregion

        }
        }

        Die von List geerbte KLasse die in der Klasse Configuration enthalten ist:

        [Serializable]
        public class Set : List<LinkItem>, HGDS.DE.OPCORMapper.ILinkItemSet
        {
        private Guid _id;
        private string _text

        public string Text
        {
        get { return _text; }
        set { _text = value; }
        }


        public LinkItemSet()
        {

        }

        public Guid Id
        {
        get
        {
        if (_id == Guid.Empty) _id = Guid.NewGuid();
        return _id;
        }
        set { if (_id == Guid.Empty) _id = value; }

        }


        Die Methode um die in einer Liste gehaltenen Objekte vom Typ Configuration zu serialisieren:
        private void SerializeAsXml<T>(List<T> list, string path)
        {
        this._xmlSerializer = new XmlSerializer(list.GetType());
        using (TextWriter textWriter = new StreamWriter(path))
        this._xmlSerializer.Serialize(textWriter, list);
        }

        Comment


        • #5
          Das Serialisieren von ICollection bzw. IEnumerable implementierenden Klassen wird vom XmlSerializer wie bei einem Array vorgenommen(irgendeine Art von Optimierung frag mich nicht nach Details)). Heißt es werden nur die Items serialisiert. Dein Set Klasse sollte die Liste also als Property halten und nicht von ihr ableiten.

          Comment


          • #6
            genau das ist es, es hängt mit den Klassen die von INumerable abgeleitet sind zusammen..
            Danke

            Comment

            Working...
            X