Laden...

Property fehlt in xml-Datei

Erstellt von Christoph1968 vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.768 Views
C
Christoph1968 Themenstarter:in
93 Beiträge seit 2007
vor 13 Jahren
Property fehlt in xml-Datei

verwendetes Datenbanksystem: xml

Hallo zusammen,

ich habe eine Klasse von System.Collections.ObjectModel.Collection abgeleitet
um sie zu serialisieren und als xml-Datei zu speichern.
Das klappt soweit auch wunderbar.
Nun habe ich in der abgeleiteten Klasse ein weiteres Property (string ImportVersion)definiert,
und dieses Property fehlt nun in meiner xml-Datei.
Es wird keine exception ausgeloest.

Hier ist die Definition meiner Klasse

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.Xml.Serialization;

namespace SiplaceToolBox.IncomingMaterialManager
{
    [Serializable]
    [XmlType("PackagingList")]
    public class PackagingUnitCollection : Collection<PackagingUnit>
    {

#region Fields

        private string _importVersion;

#endregion Fields


#region Properties

        [XmlAttribute]
        public string ImportVersion
        {
            get { return _importVersion; }
            set { _importVersion = value; }
        }

#endregion Properties


#region Constructors

        public PackagingUnitCollection()
            : base()
        {
            _importVersion = "1.0.1.1";

        }//public PackagingUnitCollection()

#endregion Constructors

    }//public class PackagingUnitCollection : Collection<PackagingUnit> 

Ich bin ein bißchen ratlos, weil ich meine, soetwas prinzipiell schon oft gemacht zu haben.

Waere fuer einen Tip dankbar.

Viele Gruesse

Christoph

C
2.121 Beiträge seit 2010
vor 13 Jahren

Was für einen Typ übergibst du dem Serializer?

S
443 Beiträge seit 2008
vor 13 Jahren

Wie serialisiert Du?
Bisschen Code könnte da helfen

mbg
Rossegger Robert
mehr fragen mehr wissen

Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen

C
Christoph1968 Themenstarter:in
93 Beiträge seit 2007
vor 13 Jahren

Hallo zusammen,

vielen Dank fuer Eure Antworten.

Die Funktion zum Serialisieren sieht wie folgt aus:

 private void exportPackagingUnitsToXml(FileInfo fileInfoTargetFile, PackagingUnitCollection packagingUnitCollection)
        {
            FileStream fileStream = new FileStream(fileInfoTargetFile.FullName, FileMode.Create);

            try
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(PackagingUnitCollection));

                xmlSerializer.Serialize(fileStream, packagingUnitCollection);

                fileStream.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("IncomingMaterialManager.exportPackagingUnitsToXml(FileInfo fileInfoTargetFile, PackagingUnitCollection packagingUnitCollection)" + ex.Message);
            }
            finally
            {
                fileStream.Close();
            }

        }//private void exportPackagingUnitsToXml(FileInfo fileInfoTargetFile, List<PackagingUnit> listPackagingUnits)

Es wird eine PackagingUnitCollection serialisiert.

4.931 Beiträge seit 2008
vor 13 Jahren

Hallo,

meinst du nicht eher bei der Deklaration deiner Eigenschaft 'ImportVersion'


[XmlElement]
//bzw.
[XmlElementAttribute]

anstatt [XmlAttribute], denn XmlAttribut ist gar keine Attribute-Klasse, sondern eine von XmlNode abgeleitete Klasse.

C
2.121 Beiträge seit 2010
vor 13 Jahren

Es gibt XmlAttributeAttribute, das hier wohl gemeint ist. Der Compiler kapiert das, dass er sich in einer Attributdeklaration das hintere "Attribute" selber dazudenken soll.
Aber vielleicht gibts hier ja wirklich einen Konflikt, weil es das was tatsächlich da steht auch ein gültiger Klassenname ist.
Ausprobieren!

4.931 Beiträge seit 2008
vor 13 Jahren

Stimmt, an die Klasse XmlAttributeAttribute hatte ich gar nicht gedacht 😉

Da aber Christoph1968 von 'Property' in der XML-Datei sprach, bin ich auch eher von XmlElement(Attribute) ausgegangen...

C
Christoph1968 Themenstarter:in
93 Beiträge seit 2007
vor 13 Jahren

Hallo Th69, hallo chilic,

vielen herzlichen Dank fuer Eure Antworten,

ich habe es mit der Deklaration als
XmlElement, XmlElementAttribute und XmlAttributeAttribute probiert,
das Resultalat ist leider immer gleich:
Das Property wird beim Serialisieren schlicht uebergangen.

Aber gut, das ist zwar nicht schoen und es wuerde mich schon interessieren,
was da schief laeuft, aber ich habe festgestellt, dass die erzeugte xml-Datei zumindest im Moment auch ohne ImportVersion vom betreffenden System weiterverarbeitet wird.

Viele Grüße und nochmals danke

Christoph

S
443 Beiträge seit 2008
vor 13 Jahren

Irgendwie wäre aber interessant herauszufinden warum das ding nicht dabei ist

Wenn du das Attribute weg lässt, macht er Dir dann einen Node?

sie Dir mal die Attribute
OnSerialized und OnDeserialized an, vielleicht kannst Du aus den contexten was rauslesen.

mbg
Rossegger Robert
mehr fragen mehr wissen

Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen

C
Christoph1968 Themenstarter:in
93 Beiträge seit 2007
vor 13 Jahren

Hallo spike24,

auch wenn ich dem Property kein weiteres ControlAttribute verpasse,
wird es ignoriert.
Das war eigentlich auch mein allererster Ansatz,
so habe ich das bisher immer gemacht.

...
#region Properties

        public string ImportVersion
        {
            get { return _importVersion; }
            set { _importVersion = value; }
        }

#endregion Properties
...

Das mit OnSerialized und OnDeserialized sehe ich mir an,
kann das aber erst naechste Woche im Buero tun, melde mich dann.

Vielen Dank Dir und einen schoenen Sonntag

Christoph