私は現在、奇妙な問題を解決しようとしています。多くの情報を見つけることができないもの。
要するに:
シリアル化された xml オブジェクトを逆シリアル化すると、正しいオブジェクト タイプのインスタンスが取得されますが、オブジェクト内のデフォルト値しか取得されません。
より長い話:
シリアライゼーションとデシリアライゼーションは、2 つの異なるプラットフォームで発生します。1 つは .net コンパクト フレームワーク (Windows 携帯電話用) で、もう 1 つは通常の .net フレームワークです。
同じプラットフォームでシリアル化してから逆シリアル化すると、オブジェクトが正しく埋められます。この問題は、シリアル化された文字列が他のプラットフォームに送信された場合にのみ発生します。
サービスにデータをプロビジョニングする別のサービスからテスト xml ファイルも取得しました。これらの xml ファイルは正しく逆シリアル化されます。
詳細:
生成される XML は、プラットフォームによって若干異なります。(注: これらは内部 xml 構造からのフラグメントであり、繰り返し発生する相違点を特定しました。読み取り: ユニットはルート ノードではありません)
クライアント (電話、コンパクト フレームワーク)
<Unit>
<UnitId xmlns="">555</UnitId>
<VehicleId xmlns="">555</VehicleId>
<EmployeeId xmlns="">004</EmployeeId>
</Unit>
サーバー (通常の .net サーバー)
<Unit xmlns="">
<UnitId>555</UnitId>
<VehicleId>555</VehicleId>
<EmployeeId>004</EmployeeId>
</Unit>
親システムから (不明なプラットフォーム)
<Unit>
<UnitId>308</UnitId>
<VehicleId>307</VehicleId>
<EmployeeId>ASA 500</EmployeeId>
</Unit>
また、標準の名前空間 (xmlns) を設定する代わりに、親システムは次のようにルート ノードでプレフィックスを使用します。
<amg:RequestFinishRoute xmlns:amg="http://beans.order.integration.tt.transware.se/order/trackingFinishRoute">
シリアライズして作成したデータは次のようになります。
<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">
私は使用します:
System.Xml.Serialization.XmlSerializer
シリアライゼーション/デシリアライゼーションを行うシリアライザー (コンパクト フレームワークでサポートされているシリアライザーのみ)。
これを行うコードは xsd2code によって生成されます。
質問:
この問題に関するヒントやリソースはありますか?