Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Serialisieren in XML von bidirektionale assoziation
tigersammy
myCSharp.de - Member



Dabei seit:
Beiträge: 62
Herkunft: Nürnberg

Themenstarter:

Serialisieren in XML von bidirektionale assoziation

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von tigersammy am .
Wenn ich eine SuSE-DVD an ein Schwein binde und dieses trete, laufen KDE & Co. auch ohne RAM recht schnell.
private Nachricht | Beiträge des Benutzers
Grumbler85
myCSharp.de - Member



Dabei seit:
Beiträge: 550
Herkunft: Rheingau Taunus

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
Scarecraft
myCSharp.de - Member

Avatar #avatar-2558.jpg


Dabei seit:
Beiträge: 284
Herkunft: Lingen

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
tigersammy
myCSharp.de - Member



Dabei seit:
Beiträge: 62
Herkunft: Nürnberg

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
pohlmann
myCSharp.de - Member



Dabei seit:
Beiträge: 68
Herkunft: Willingen

beantworten | zitieren | melden

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 :P
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von pohlmann am .
Religionskriege sind Konflikte zwischen erwachsenen Menschen, bei denen es darum geht, wer den cooleren, imaginaeren Freund hat
private Nachricht | Beiträge des Benutzers