我目前正在尝试解决一个奇怪的问题。一个我无法找到很多信息。紧凑.net和常规.net之间的C#序列化/反序列化
简称:
当反序列化的XML serialzed对象,我得到正确的对象类型的实例,但我只得到对象内部的默认值。
较长的故事:
序列化和反序列化发生在两个不同的平台。 一个是.net精简版框架(适用于Windows手机),另一个是常规.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生成。
问题:
任何人有这个问题的任何提示或资源?
什么串行器?我在猜测BinaryFormatter? –
如果它是XML,那么你如何在两个平台上尝试序列化并查看其差异。根据我的经验,它应该会产生相同的结果,但是再次,Compact Framework中可以有任何东西。真正的解决方案不是使用Compact Framework :) – zmilojko
如果您可以向我们展示两个平台之间的测试xml,它可能会有一些差异。 –