紧凑 .net 和常规 .net 之间的 C# 序列化/反序列化

标签 c# .net windows-mobile compact-framework

我目前正在尝试解决一个奇怪的问题。我找不到太多相关信息。

简而言之:

当反序列化 xml 序列化对象时,我得到了正确对象类型的实例,但我只得到对象内部的默认值。

更长的故事:

序列化和反序列化发生在两个不同的平台上。 一种是 .net 紧凑框架(适用于 Windows Mobile 手机),另一种是常规 .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 生成。

问题:

有人对这个问题有任何提示或资源吗?

最佳答案

两个平台是否使用相同的编码? 我的手持式条码扫描仪生成的 Xml 可以通过 PC 上的 VFP 程序读取。 无论如何,我更喜欢使用 XmlTextWriter 而不是 XmlSerializer。

关于紧凑 .net 和常规 .net 之间的 C# 序列化/反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10501392/

相关文章:

c# - 如何在 Windows 窗体/Window Mobile 应用程序中调整动态控件的大小?

c# - EntityFramework Core 1.1.0 缺少 Include()?

c# - 如何在表中添加多行?

c# - 在 MVC 中包含来自程序集的 javascript

c# - 电子邮件正则表达式验证

c# - Windows Mobile (C#) 的应用程序退出

debugging - Windows 移动调试

c# - 从 DLL 文件中读取资源

c# - 可存储在 Excel 中的值

c# - 大量已知类型如何影响 DataContractSerializer 的性能