J'essaie actuellement de résoudre un problème wierd. celui que je ne peux pas trouver beaucoup d'informations sur.C# Sérialisation/désérialisation entre compact .net et .net standard
en bref:
Lorsque désérialiser un objet serialzed xml je reçois une instance du type d'objet correct, mais j'obtenir que des valeurs par défaut à l'intérieur de l'objet.
plus longue histoire:
sérialisation et désérialisation sur deux plates-formes se produit différentes. L'un est le framework .net compact (pour un téléphone mobile Windows), l'autre est le framework .net standard.
La sérialisation puis la désérialisation sur la même plate-forme produisent un objet correctement rempli, le problème se produit uniquement lorsqu'une chaîne sérialisée est envoyée à l'autre plate-forme.
J'ai également obtenu des fichiers de test xml d'un autre service qui provisionnera mon service avec des données, ces fichiers xml se désérialisent correctement.
spécificités:
Le XML généré diffèrent légèrement selon les plateformes. (Notez, ce sont des fragments de la structure XML interne où j'ai identifié des différences reproduisants Lire:. L'unité est pas un nœud racine)
client (téléphone, Compact Framework)
<Unit>
<UnitId xmlns="">555</UnitId>
<VehicleId xmlns="">555</VehicleId>
<EmployeeId xmlns="">004</EmployeeId>
</Unit>
Server (.net régulier serveur)
<Unit xmlns="">
<UnitId>555</UnitId>
<VehicleId>555</VehicleId>
<EmployeeId>004</EmployeeId>
</Unit>
à partir du système parent (plateforme inconnue)
<Unit>
<UnitId>308</UnitId>
<VehicleId>307</VehicleId>
<EmployeeId>ASA 500</EmployeeId>
</Unit>
En outre, au lieu de définir l'espace de noms standard (xmlns) le système parent utilise un préfixe dans le nœud racine, comme ceci:
<amg:RequestFinishRoute xmlns:amg="http://beans.order.integration.tt.transware.se/order/trackingFinishRoute">
alors que les données que nous créons par sérialisation donne:
<RequestFinishRoute xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://beans.order.integration.tt.transware.se/order/trackingFinishRoute">
I utiliser un:
System.Xml.Serialization.XmlSerializer
Sérialiser pour effectuer la sérialisation/désérialisation (uniquement sérialiseur pris en charge dans un environnement compact).
Le code pour ce faire est généré par xsd2code.
question:
Quelqu'un a des conseils ou des ressources sur ce problème?
Quel sérialiseur? Je devine BinaryFormatter? –
s'il s'agit de XML, pourquoi ne pas essayer la sérialisation sur les deux plates-formes et voir la différence? Dans mon expérience, il devrait donner le même résultat, mais encore une fois, tout peut être dans Compact Framework. La vraie solution est de ne pas utiliser Compact Framework :) – zmilojko
Si vous pouvez nous montrer un test XML entre les deux plates-formes, il y a probablement quelques différences. –