【问题标题】:Deserialize xml with new lines and Escape characters C#使用新行和转义字符 C# 反序列化 xml
【发布时间】:2014-05-12 13:39:11
【问题描述】:

我正在调用以 xml 格式返回响应的服务。响应不遵循 xml 准则并包含一些新行和“\”。

由于格式问题,反序列化失败。

XML 格式:

\r\n\r\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<N><details><date>25042014</date><orderNumber>OrderNumber         </orderNumber><Response>1</Response></details>

我通过在反序列化之前删除新行和“\”来解决该问题,但正在寻找更简洁的解决方案(如果存在)。

【问题讨论】:

  • 最好的解决方案可能是使用内置的序列化器/解串器。这些引擎已经为您解决了这个问题,并且可以很好地处理大多数情况。
  • 我正在使用内置的反序列化器,但问题出现了。

标签: c# xml xml-parsing deserialization xml-deserialization


【解决方案1】:

XML 文件必须定义明确,所以它必须对应一个 XSD 结构。转义序列和新行将破坏有效的 xml,因此不会对应于 XSD 结构,进而导致反序列化失败。据我所知,没有办法绕过它,除了事先读取文件,删除不需要的字符和序列,然后再次保存,以便XmlDocument读取时可以成功反序列化。

【讨论】:

  • 只是补充一点:读取,重新保存为文件,然后重新读取可能是不必要的。根据 HusseinX 的序列化层,更改可能会在内存中进行,方法是将文件/流作为 string 读取,操作该字符串,然后将其输入反序列化机制。
  • 我也尝试过 XML 解析,但遇到了同样的问题。所以用这种格式,除非我调整格式,否则没有办法做到这一点?
  • @HusseinX 几天前我也遇到了同样的问题,这就是我想出的解决方案。正如 Chris Sinclair 所提到的,可以只使用内存,但是将修改后的文件保存到硬盘并重新读取文件是一个很好的解决方案,特别是如果您希望稍后使用有效文件。
  • @AlexBarac 我从远程服务收到此响应,我没有任何本地文件。我曾经在内存中反序列化之前操作 xml,但正在寻找其他建议。谢谢
猜你喜欢
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
相关资源
最近更新 更多