Laden...

Serialisieren in XML von bidirektionale assoziation

Erstellt von tigersammy vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.418 Views
T
tigersammy Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren
Serialisieren in XML von bidirektionale assoziation

Ich würde gerne diverse Klassen nach XML serialisieren nur leider klapt das nicht so ganz.


_kunde = new Kunde();
_kunde.Name = "Test1";
doc1 = new Dokument();
doc2 = new Dokument();
doc1.Kunde = _kunde;
doc2.Kunde = _kunde;
doc1.Titel = "DOC1";
doc2.Titel = "DOC2";
_kunde.Dokumente.Add(doc1);
_kunde.Dokumente.Add(doc2);
XmlSerializer ser = new XmlSerializer(typeof(Kunde));
FileStream str = new FileStream(@"c:\Kunde1.xml", FileMode.Create);
ser.Serialize(str, _kunde);
str.Close();
MessageBox.Show("fertig";) ;


public class Kunde {
private string _name;
private Guid _UID;
private Doclist _dokumente;
public Kunde() {
_name = "";
_UID = Guid.NewGuid();
_dokumente = new Doclist();
}
public string Name {
get {
return _name;
}
set {
_name = value;
}
}
public Guid UID {
get { return _UID;
}
}
public Doclist Dokumente {
get {
return _dokumente;
}
}
}

public class Dokument {
private Guid _UID;
private string _Titel;
private DateTime _Zeit;
private Kunde _kunde;
public Dokument() {
_UID = Guid.NewGuid();
_Zeit = DateTime.Now;
}
public Guid UID {
get {
return _UID; }
}
public string Titel {
get {
return _Titel;
}
set {
_Titel = value;
}
}
public DateTime Zeit {
get {
return _Zeit;
}
set {
_Zeit = value;
}
}
public Kunde Kunde {
get {
return _kunde;
}
set {
_kunde = value;
}
}
}

public class Doclist : List<Dokument>

Es kommt immer zu einem fehler wenn ich versuche die Daten zu serialisieren.InvalidOperationException: Beim Generieren des XML-Dokuments ist ein Fehler aufgetreten.gibts vielleicht eine plaussible erklärung für den fehler? gibts eine möglichkeit so ein Konstrukt einfach zu Serialisieren ohne jeder klasse einzeln eine Serialisierungs/Deserialisierungs methode mitzugeben?

Wenn ich eine SuSE-DVD an ein Schwein binde und dieses trete, laufen KDE & Co. auch ohne RAM recht schnell.

G
538 Beiträge seit 2008
vor 14 Jahren

Hallo,

Da der Einzeilige Quellcode recht schlecht zu lesen ist schau ich nicht ganz durch, aber nur schonmal als Hinweis:
XML Serialisierung kann nur Felder serialisieren, die public sind oder einen öffentlichen getter und setter haben.

Aber soo durchgestiegen hatte ich auch nicht, als ich es versucht habe.. und Google hat mir auch nur für Simple Klassen geholfen, also ohne Referenzen...

Grüße TG

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

268 Beiträge seit 2008
vor 14 Jahren

Kann mich nur anschließen , bitte nutze demnächst die CSHARP Tags.Sonst hat keiner lust sich das durchzulesen.

Das könnte dir helfen:
klick me

MFG scare

Name: Scarecraft
Language:C#
learning since:winter 2007
IDE: Visual Studio 2005/08 Professional Editon
Skill:Medium
qualifications: MCP - Microsoft Certified Professional
Homepage : FX RPG Maker

T
tigersammy Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren

Werde das nächste mal die Tags verwenden wenn mir jedamd sagt wie.

aber nochmal zu der frage.
mit der XML Serialisierung so wie ihr sie mir genennt habt geht das ganze leider nicht so wie es sein sollte den es verläuft sich in einer endlosschleife.
kurze info folgendes geht

Kunde -> Dokumente
aber wenn man das ganze so betrachtet
Kunde -> Dokumente -> Dokument[0] -> Kunde
dann verläuft sich die XML Serialisierung immer.
Es geht hierbei wirklich im eine Bedirektionale verbindung der klassen.
Also kurzen Beispiel


public class klasseA
{
public klasseB _temp;
public klasseB Temp
{
get
{
return _temp;
}
set
{
_temp = value;
}
}

public class klasseB
{
public list<klasseA> _temp;
public list<klasseA> Temp
{
get
{
return _temp;
}
set
{
_temp = value;
}
}

Wenn ich eine SuSE-DVD an ein Schwein binde und dieses trete, laufen KDE & Co. auch ohne RAM recht schnell.

P
67 Beiträge seit 2008
vor 14 Jahren

Was steht denn in der Inner-Exception? Ich könnt mein Ar*** drauf verwetten, das du zirkuläre Referenzen gebaut hast.
Hatte ich auch mal Spaß dran. Leider unterstützt der XmlSerializer dies nicht.
Auf CodeProject findest du einige Serializer die das unterstützen.

//Edit: ach... in dem Beitrag über mir hast du es ja selber noch geschrieben, das eine bidirektionale Assoziation unter den Klassen besteht 😛

Religionskriege sind Konflikte zwischen erwachsenen Menschen, bei denen es darum geht, wer den cooleren, imaginaeren Freund hat