Jag har några business objects som jag serialiserar. Hej! Det konstiga är att relationen mellan Ordern och dess User blir rätt, men inte OrderRows.XML-serializer problem
Orders - En starkt typad collection av Order
Order - Ett objekt innehållande en order. Innehåller en User och en OrderRows collection
User - Ett objekt innehållande en user
OrderRows - Starkt typad collection av OrderRow
OrderRow - Objekt innehållande orderrader
För att serialisera gör jag:
<code>
Dim retVal As XmlDocument = New XmlDocument
Dim ser As XmlSerializer = New XmlSerializer(obj.GetType())
Dim sb As StringBuilder = New StringBuilder
Dim writer As TextWriter = New StringWriter(sb)
ser.Serialize(writer, obj)
Dim reader As StringReader = New StringReader(writer.ToString())
Dim dst As DataSet = New DataSet
dst.ReadXml(reader)
Return dst
</code>
Vilket gör att jag får ut ett DataSet som jag sedan skriver ut till browsern med dst.GetXml efter att jag satt ContentType till text/xml.
Allt funkar finfint förutom ett litet problem. Istället för att få ut OrderRows för en Order så får alla Ordrar de OrderRows som hör till den allra sista Ordern.
Själva objektskapandet går till så här:
1. myOrders skapas och fylls
2. För varje Order som skapas i myOrders så...
3. ...skapas en User och fylls...
4. ...skapas en OrderRows collection och fylls...
För att kontrollera så kör jag ut varje orders id och det orderid som står på varje orderrad innan jag serialiserar och då stämmer det. Så felet verkar ligga i hur Order eller OrderRow serialiseras.
Är det någon här som pysslat med XmlSerializer och sett liknande problem?
Kan det bli problem i DataSettet med relationer eller nåt?
Mitt alternativ är att loopa igenom alla ordrar och skapa Xml-dokumentet manuellt.Sv: XML-serializer problem
Jag är inte så hemma på XmlSerializer
men jag vet hur man får ihop det med Dataset.
Det kanske räcker. Jag tror det är här problemet ligger.
Du måste skapa relationer mellan dina tabeller,
samt sätta Nested = True
<code>
DsFakturor.Relations.Add("Faktura", _
DsFakturor.Tables("Fakturahuvud").Columns("pkFakturaID"), _
DsFakturor.Tables("Fakturarad").Columns("fkFakturaID"))
DsFakturor.Relations("Faktura").Nested = True
</code>
OlaSv: XML-serializer problem
Jag fick fram en annan lösning. Istället för att ladda mina objekt så plockar jag ut ordrarna med all info som behövs till ett DataSet och kör ut XML från det. Orderraderna skall användas vid ett senare tillfälle så jag hämtar dessa på samma sätt då.
Lokalt i Windowsappen så lägger jag informationen från XML-dokumentet i en Access databas.
Hade väl hellre serialiserat mina objekt men jag har inte tid att experimentera den här gången. :/