Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
ArrayList die Objekte hält, die Objekte halten in XML??
spacer
Autor Nachricht
Luc0
Hält's aus hier

Beiträge: 4
Dabei seit: 17.02.2010



BeitragVerfasst: Mi 17.02.10 17:16  Antworten mit Zitat Beitrag melden
Hi Leute!

Ich bin leider ein XML Anfänger und versuche gerade, eine ArrayList zu serialisieren.

Die ArrayListe hält eine Menge von Job-Objekten, wobei jeder Job auch noch weitere Objekte hält, wie zB Category, Details usw..
Die Category, Details - Objekte haben nur properties (getter und setter).

Wenn ich jetzt nur die ArrayListe mit den Jobs serialisieren will, ohne das die Jobs weitere Objekte halten, funktioniert das. Aber sobald ich zB. wieder die Details einkommentiere, kommt wieder folgende Exception: "There was an error reflecting type 'JobList'."

Hier mal der Code:

Vielen vielen Dank im Vorraus!!! :/

ausblenden C#-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
 class MainTest
{
static void Main()
{
test();

}

public static void test()
{



JobList jobList = new JobList();
jobList.addJob(new Job("hallo",2));
jobList.addJob(new Job("tschö", 3));
XmlSerializer s = new XmlSerializer(typeof(JobList), new Type[] { typeof(JobDetails) });

TextWriter w = new StreamWriter("./xml.xml");
s.Serialize(w, jobList);
w.Close();


}
}

ausblenden C#-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
 [XmlRoot("JobList")]
public class JobList
{
[System.Xml.Serialization.XmlArray("Job")]
[System.Xml.Serialization.XmlArrayItem("job", typeof(Job))]

public ArrayList jobList;

public JobList()
{
jobList = new ArrayList();

}

public void addJob(Job job)
{
jobList.Add(job);
}

}

ausblenden C#-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
 public  class Job
{


[XmlAttribute("jobDetails")] public JobDetails details { get; set; }
// [XmlAttribute("company")] public Company company { get; set; }
// [XmlAttribute("person")] public Person person { get; set; }
[XmlAttribute("id")] public int id { get; set; }
[XmlAttribute("titel")] public string titel { get; set; }
public Job(string titel, int id)
{
this.id = id;
this.titel = titel;

}

public Job() { }
}

ausblenden C#-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
 public class JobDetails
{


[XmlAttribute("categorie")] public string categorie { get; set; }
[XmlAttribute("title")] public string title { get; set; }
// [XmlAttribute("field")] public String field { get; set; }
// [XmlAttribute("description")] public String description { get; set; }
// [XmlAttribute("applicationDeadline")] public DateTime applicationDeadline { get; set; }
// [XmlAttribute("startDate")] public DateTime startDate { get; set; }

public JobDetails()
{

}
public JobDetails(string title)
{
this.title = title;
}
}
Private Nachricht sendenPosting in privater Nachricht zitieren
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 900
Erhaltene Danke: 14
Dabei seit: 28.01.2009
Wohnort: Stuttgart

Windows XP
C# (VS 2008)
BeitragVerfasst: Mi 17.02.10 17:43  Antworten mit Zitat Beitrag melden
Hallo und :welcome:,

die InnerException hilft dir manchmal auch. Ich vermute da steht dann sowas drin wie: "der typ xy kann nicht serialisiert werden".

Man kann durchaus Objekte mit Objekten serialisieren. Dabei muss aber beachtet werden, dass jedes der Objekte sozialisierbar ist.

ausblenden C#-Quelltext markieren
1:
2:
3:
4:
    //   [XmlAttribute("field")] public String field { get; set; }
// [XmlAttribute("description")] public String description { get; set; }
// [XmlAttribute("applicationDeadline")] public DateTime applicationDeadline { get; set; }
// [XmlAttribute("startDate")] public DateTime startDate { get; set; }


Heißt bei field und Description geht es.. aber DateTime ist nicht serialisierbar.

Du kannst dir helfen indem du application Deadline und startDate beim xml serialisieren igonierst und dafür ein HilfVariable mit der String-representation des Datum verwendest.

Gruß Daniel
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Luc0
Hält's aus hier

(Threadstarter)

Beiträge: 4
Dabei seit: 17.02.2010



BeitragVerfasst: Mi 17.02.10 18:31  Antworten mit Zitat Beitrag melden
Hey!

Danke für die schnelle Antwort! Ich werde das dann später mal versuchen! :)
Private Nachricht sendenPosting in privater Nachricht zitieren
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

Beiträge: 2864
Erhaltene Danke: 11
Dabei seit: 12.11.2005
Wohnort: Brackenheim

Win 7
F#, C# (VS2010)
BeitragVerfasst: Mi 17.02.10 19:34  Antworten mit Zitat Beitrag melden
Ich habe mir mal die innerste Exception angeschaut:
Zitat:
{"Element 'details' vom Typ JobDetails kann nicht serialisiert werden. XmlAttribute/XmlText kann nicht zum Codieren von komplexen Typen verwendet werden."}

Und das macht auch Sinn, das kann wirklich nicht funktionieren :) . DateTime ist dagegen kein Problem, user profile icondanielf meint wahrscheinlich TimeSpan.

PS:
user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
sozialisierbar
:mrgreen:

_________________
>λ=
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 900
Erhaltene Danke: 14
Dabei seit: 28.01.2009
Wohnort: Stuttgart

Windows XP
C# (VS 2008)
BeitragVerfasst: Do 18.02.10 10:37  Antworten mit Zitat Beitrag melden
Eigentlich meinte ich die Uri Klasse :o Mit dem Beispiel hatte ich es. DateTime war eine Vermutung.

Aber generell sollten alle Objekte sozialisierbar sein :D Dann wäre die Integration einfacher ;) geil geil :D
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Luc0
Hält's aus hier

(Threadstarter)

Beiträge: 4
Dabei seit: 17.02.2010



BeitragVerfasst: Do 18.02.10 14:34  Antworten mit Zitat Beitrag melden
Hey ihr!

Also ich verstehe die innerste Exception ehrlich gesagt nicht, wieso sollte es denn dabei einen Fehler geben?
Wie kann ich denn meine Objektstruktur serializieren? Oder gibt es da keine Möglichkeit?

Bin für jede Hilfe dankbar :)

Bis dann,

Luc0
Private Nachricht sendenPosting in privater Nachricht zitieren
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 900
Erhaltene Danke: 14
Dabei seit: 28.01.2009
Wohnort: Stuttgart

Windows XP
C# (VS 2008)
BeitragVerfasst: Do 18.02.10 15:07  Antworten mit Zitat Beitrag melden
Hi,

ich hab privat auch mal "komplexere" Objektstruktur mit dem XmlSerialiser serialisiert. Bei mir war nur ein Uri-Objekt das Problem, welches ich dann über einen String-Wrapper serialisiert habe. Deshalb habe ich mich gewundert, was bei dir überhaupt Falsch läuft. Da der Tipp mit dem DateTime daneben lag hab ich nun mal den Code bei mir geladen.

Ging tatsächlich am Anfang nicht. Dann hab ich sukzessive ein Objekt nach dem anderen für sich serialisiert und das ging. Also musste das Problem in Kombination mit der Struktur sein. Da es am JobDetails gehackt hat, hab ich mal das XmLAttribute entfernt und zack gings. Leider weiß ich nicht genau was dabei sein Problem war :nixweiss:

Aber Kha wird uns bestimmt die Theorie näher bringen ;)

Anmerkung:
Mit dem Attribute XmlElement geht es (anstatt XmlAttribute). Wahrscheinlich liegt das daran, dass er die Klasse JobDetails nicht als Attribut abbilden kann! (Edit: sagt ja auch mal wieder die Fehlermeldung: "XmlAttribute/XmlText kann nicht zum Codieren von komplexen Typen verwendet werden." - und Kha hatte (wie immer) den richtigen Riecher, bzw. kann Fehlermeldungen richtig lesen)


Gruß Daniel
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Luc0
Hält's aus hier

(Threadstarter)

Beiträge: 4
Dabei seit: 17.02.2010



BeitragVerfasst: Do 18.02.10 17:12  Antworten mit Zitat Beitrag melden
Hey Daniel mein Retter!
Es funzt! Es war wirklicht nur das XmlElement... :)

Vielen vielen Dank :)


bis dann,

Luc0
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home