21. november 2007 - 17:53Der er
8 kommentarer og 1 løsning
XmlSerialize objects med Array eller List typer
Hej eksperter
Jeg har en klasse som skal XmlSerilizeres. Klassen består af 2 typer af "felter": 1 felt af objekt typen KUNDE og et Array af objekt typen REPORTER (har også prøvet typen List).
denne klasse der vil betå af 1 KUNDE og X antal af REPORTER vil jeg gerne Serialisere.
At tilføje KUNDE og REPORTER til klassen er ikke noget problem, men når jeg forsøger at bruge XmlSerialize.Serialize får jeg en fejl:
Message: There was an error reflecting type <klassensNavn> InnerText: There was an error reflecting field 'reportsArray'.
reportArray er min Array af REPORTER
Min kode for klassen ser således ud:
using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization;
namespace MinConsole { [System.SerializableAttribute()] public class sObject { public cWebService.KUNDE customer; public rWebService.REPORTER [] reportsArray; } }
Jeg har søgt på nettet omkring Serialize array eller List typer, men synes ikke helt jeg forstår hvordna det kan gøres, hvis det kan.
håber en af jer har prøvet dette eller måske kan forsøge med en løsning.
Tak for dit meget fuldesgørende eksempel. Det er bare så stort.
Jeg har ikke styr over selve KUNDE eller REPORTER objekterne da det er resultater fra et webservice kald, men for at få en samlet KUNDE og X antal REPORTER ville jeg oprette en klasse som kunne håndtere disse og så XmlSerialize denne klasse.
En ting som jeg helt sikker ikke har med i min sObject klasse er en tom constructor så det vil jeg forsøge i morgen når jeg har adgang til webServicen igen :)
KUNDE og REPORTER typerne skal være markeret som Serializable eller går den ikke. Der er nu en vis chance for at de er det siden at de kan streames over en webservice.
Jeg har 2 webservices der giver mig 1 KUNDE objekt og x antal REPORTER objekter
samtidig har jeg et List<sObject> som jeg tilføjer sObjects som består af KUNDE objectet og de antal af REPORTER objekter jeg nu får tilbage fra mine WebService kald.
Herefter er det min plan via XmlSerialize at få XML strukturen via en XmlWriter:
XmlSerializer oSerializer = new XmlSerializer(typeof(GlitnirConsole.StreamServeObject), extraTypes);
det er jeg ret sikker på de er, mne ellers så bliver de det :) - desværre har jeg ingen direkte adgang til WebServicesne, men der skal vist ikke meget overtalelse til, hvis dette skal lykkes :)
jeg har fundet en anden måde at løse min serialisering på, istedet for at lave min egen klasse der består af mine KUNDER og REPORTER, så serializer jeg dem on the fly.
kode:
foreach (cWebService.KUNDE c in custList) { Boolean ok = false; List<rWebService.PositionReport> reports = new List<rWebService.PositionReport>(); foreach (cWebService.Portfolio p in c.Portfolios) { if (p.CustomerType.Equals(cWebService.PortfolioCustomerType.FUND)) { ok = true; reports.Add(rWebServiceHandle.getPosReport("user",p.Id,DateTime.Now)); Console.WriteLine(p.CustomerType.ToString()); } } if (ok) { cSerializer.Serialize(xmlWriter, c, customNamespace); foreach (GlitnirReportWebService.PositionReport r in reports) { rSerializer.Serialize(xmlWriter, r, customNamespace); } } }
det giver en samlet fil/memeryStream med alle nødvendige object som er serializeret. Det var ikke helt min ide - men det virker ret godt og stabilt.
Jeg vil da sige at jeg fik noget der lignede den fejl-besked du beskriver da jeg kodede mit eksempel. Svjh. forsvandt den med at jeg tilføjede den tomme constructor til Rapport-klassen. Men lige nu står mindet godt nok en smule svagt, så det kan være at det ikke lige var det...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.