如何检查DataContract的XML输出

时间:2014-05-29 20:37:15

标签: c# xml wcf datacontractserializer

我继承了一些无效的代码。当然它在最后一次提交时工作正常,但不知何故它现在还没有返回好的数据。历史日志显示数据如下所示:

[0] => SimpleXMLElement Object
    (
        [Patron_Key] => 412730
        [x3.32] => 4A
        [x3.1] => 2014-01-08T08:00:00-07:00
        [x3.2] => 2014-01-22T07:59:59-07:00

    )

有效字段名称是x3.32。有意地将'x'添加到列名称中。但是,现在XML在字段名称中带有前导零,如下所示:

    <Patron_Key>363384</Patron_Key>
    <_x0033_.32>BC4S4B</_x0033_.32>
    <_x0033_.1>2013-08-15T08:00:00-06:00</_x0033_.1>
    <_x0033_.2>2014-05-13T07:59:59-06:00</_x0033_.2>

到目前为止,我已经检查过使用PowerShell通过COM +来自数据库的数据是否有效。这让我觉得它是IIS中的代码或其他东西。每当我在COM +调用之后在代码中记录数据以及将它放入DataTable时,它看起来很好。正在使用的数据结构具有DataContract属性,并且所有类成员都具有DataMember属性。有没有一种方法可以在序列化/反序列化之后检查数据,看看是否正在添加前导'003'?

任何关于我可能会在哪里看到的想法都会受到赞赏。我正在努力获得一个新的Web服务器,以确保它与IIS无关。

更新

原来,问题是因为列名中的第一个字符是数字,而XML节点不能以数字开头。我们发现GitHub评论让我们朝着正确的方向发展,但我也链接到一篇SO帖子,更详细地描述了这个问题。哦,有人介绍了一些代码,这些代码没有正确检测列的第一个字符中的数字 - 5个月前,所以我们不得不深入研究一大堆提交以找到违规的更改。

Encoding XML element name beginning with a number?

1 个答案:

答案 0 :(得分:0)

我看到两个问题:

  1. 有没有办法可以在数据被序列化之后检查数据,看看数据是否在哪里领先&#39;&#39;正在加入?
  2. 关于我可能会在哪里看到的任何想法?
  3. 第一个是我可以明确回答的问题:如果您能够在调试模式下运行应用程序并逐步执行代码,您应该能够使用调试器逐步执行序列化/反序列化并检查内容使用手表的变量。现在,您可能必须参与远程调试器,具体取决于代码的运行位置,如果您有辅助进程,则可能需要运行多个Visual Studio实例,并在调试模式下运行应用程序的EACH部分以正确跟踪问题,但这是调试器的用途。