[C#] XML serialization van List<List<T>>*

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 23-12-2025

_Thanatos_

Ja, en kaal

Topicstarter
Ik heb de volgende paar classes gemaakt:
C#:
1
2
3
4
5
[XmlRoot("CachedProducts")]
public class CachedProductCollection: List<CachedProductList> { }

[XmlRoot("ProductList")]
public class CachedProductList: List<Product> { }
Wat de inhoud van die classes is, boeit verder niet, want het gaat om de buitenkant. Ik wil een CachedProductCollection gaan XML-serializen en dat lukt op zich prima, maar de elementen die gegenereerd worden, klopen m.i. niet. Dit komt eruit:
XML:
1
2
3
4
5
6
7
<CachedProducts xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ArrayOfProduct>
    <Product xsi:type="ProductCpu">
    <!-- ... -->
    </Product>
  </ArrayOfProduct>
</CachedProducts>
Nou vraag ik me af waarom daar <ArrayOfProduct> staat en niet <ProductList>, want dat heb ik met een attribute gespecificeerd. Voor <CachedProducts> werkt het tenslotte wel... Ook heeft een CachedProductList class nog wat properties die met [XmlAttribute] gemarkeerd zijn, en ook die zie ik niet terug.

Iemand? :)

日本!🎌


Verwijderd

Of 't met generics te maken heeft weet ik niet, want ik ben hetzelfde probleem ook al tegengekomen bij Delphi 2006 (.NET 1.1, dus geen generics). Bij een list binnen een list lijkt de serialization/WSDL zo ongeveer al z'n attributes te vergeten, en wordt 't altijd <ArrayOf...>.

En bij de webservice die ik nu aan het maken ben (C#, .NET 2.0) kom ik weer exact hetzelfde probleem tegen: de WSDL maakt er weer <ArrayOf...> van. :(
Nu ben ik nog geen kei in webservices onder .NET, maar 't irriteert me mateloos dat de WSDL (daar moeten klanten tegenaan programmeren) er niet uitziet zoals ik wil dat 'ie eruitziet. En MSDN en Google hebben me nog geen steek verder geholpen...

Kan je dus niet helpen, maar je bent niet de enige die met dit probleem zit. Schrale troost... ;)

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 14-02 20:26
Hmm ik ben ben het ooit ook eens tegen gekomen. Het schijnt een of andere standaard implementatie te zijn, wanneer je ICollection gaat implementeren. Je kunt de XML output overrulen.
Voor een voorbeeld zie: XmlSerializer and CollectionBase derived classes. (Het is wel een 1.1 oplossing)

Verwijderd

Bedankt voor de link, maar blijkbaar is 't dat nog niet helemaal...
Thanks for the code... I have my object (derived from CollectionBase) serializing/deserializing as the root node very nicely. Except, I'm missing some attributes (public properties) that I had added to the collection. I'm thinking the XmlAttributeOverrides class might be the solution but thus far I haven't got it working...

Has anyone achieved serializing/deserializing an CollectionBase (derived) as the root node with attributes?
I have achieved seiralization using a custom attribute as the root node. Unfortunately, so far I have not been able to achieve deserialization from the generated XML because of the different name generated in the root node.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Topictitel is misleidend overigens: XML serializen is iets heel anders dan serializen met een binary/soap formatter echter de titel suggereert wel dat laatste.

[ Voor 3% gewijzigd door EfBe op 11-08-2006 09:57 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 23-12-2025

_Thanatos_

Ja, en kaal

Topicstarter
EfBe, das waar... maar bij serialization denk ik altijd gelijk aan XML. Maar dat hoeft idd niet zo te zijn. 1-0 voor jou :)

Anyway, ik heb inmiddels m'n datastructuren maar wat gewijzigd. In plaats van m'n classes van List<T> af te leiden, heb ik een kale class met daarin een property van het type List<T> en die gemarkeerd met het XmlElement attribuut. Dat geeft uiteindelijk de XML die ik wil, ook zonder extra nesting.

日本!🎌


  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Verwijderd schreef op donderdag 10 augustus 2006 @ 22:01:
Of 't met generics te maken heeft weet ik niet, want ik ben hetzelfde probleem ook al tegengekomen bij Delphi 2006 (.NET 1.1, dus geen generics). Bij een list binnen een list lijkt de serialization/WSDL zo ongeveer al z'n attributes te vergeten, en wordt 't altijd <ArrayOf...>.

En bij de webservice die ik nu aan het maken ben (C#, .NET 2.0) kom ik weer exact hetzelfde probleem tegen: de WSDL maakt er weer <ArrayOf...> van. :(
Nu ben ik nog geen kei in webservices onder .NET, maar 't irriteert me mateloos dat de WSDL (daar moeten klanten tegenaan programmeren) er niet uitziet zoals ik wil dat 'ie eruitziet. En MSDN en Google hebben me nog geen steek verder geholpen...

Kan je dus niet helpen, maar je bent niet de enige die met dit probleem zit. Schrale troost... ;)
Kijk eens naar de WSDL style die je gebruikt (rpc/encoded. document/literal etc.) en probeer het eens met een andere style. Het <ArrayOf> is echt is voor interoperabiliteit.

Kijk ook eens hier: http://webservices.xml.com/pub/a/ws/2002/05/15/ends.html
Halverwege staat iets of de arrays en de verschillen tussen SOAP 1.1 en 1.2

[ Voor 6% gewijzigd door TheNameless op 11-08-2006 15:36 ]

Ducati: making mechanics out of riders since 1946


Verwijderd

Bedankt voor de link, dat verklaart al een hoop.
Ik gebruik overigens doc|lit in m'n .NET services, en rpc in Win32 services (Delphi/Win32 ondersteunt geen doc|lit in services, alleen in de consumers). Voorkeur gaat uit naar doc|lit, omdat 't voor (Java-)klanten die er een consumer tegenaan moeten programmeren blijkbaar gemakkelijker is.

Ik wist niet dat ArrayOf... vast lag in de SOAP/WSDL specs. Nou ja, daar valt dan wel mee te leven, ook al vind ik 't niet mooi. :) En anders ga ik misschien Thanatos' workaround 's proberen...

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 23-12-2025

_Thanatos_

Ja, en kaal

Topicstarter
MayaFreak, waar heb ik gezegd dat ik met SOAP/WSDL aan het rommelen ben? Het was gewoon plain vanilla XML serialization. Dan moet ik dus hélemaal zelf kunnen bepalen hoe de XML eruit moet zien.

日本!🎌


  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Kijk eens wie ik quote :)

[ Voor 4% gewijzigd door TheNameless op 15-08-2006 20:34 ]

Ducati: making mechanics out of riders since 1946


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 23-12-2025

_Thanatos_

Ja, en kaal

Topicstarter
Zeg MayaFreak, hoe zit het dan met WSDL?

zo, nu klopt de flow van dit draadje weer :+

日本!🎌

Pagina: 1