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
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
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.
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.
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!
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...
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
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
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