1

我从服务器接收数据作为 utf-8 编码的 xml 消息,看起来像

<?xml version="1.0" encoding="utf-8"?>
<Data namespace="http://example.com/data">
...
</Data>

该示例值得注意的是,“命名空间”限定符实际上应该是指定默认 xml 命名空间的“xmlns”限定符。序列化/反序列化的代码是(自动)从模式定义文件生成的,xsd 以及随附的文档都几乎证实这是一个错误。

但是,这也意味着 Data 对象现在位于全局/空命名空间 (xmlns="") 中,并且自动生成的代码失败,并出现 XmlSerialzier 在反序列化过程中抛出的典型"There is an error in XML document ..."异常"<Data xmlns=''> was not expected."类型,人们在反序列化的命名空间中看到这种异常属性/代码和xml文件不匹配。

虽然修改自动生成的代码并将Namespace定义“修复”为例如是相当容易的

[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class Data {

我真正希望的是命名空间的弹性——也就是说,如果在未来某个时间问题由为我提供数据的人解决,我不希望被迫再次调整Namespace代码中的定义(任何 xmlns 更改将打破上述异常的反序列化代码)。

也就是说,我想要能够同时处理上述错误 xml 以及例如的代码

<?xml version="1.0" encoding="utf-8"?>
<Data xmlns="http://example.com/data">
...
</Data>

甚至(例如,如果他们决定“向后兼容”)

<?xml version="1.0" encoding="utf-8"?>
<Data xmlns="http://example.com/data" namespace="http://example.com/data">
...
</Data>

我有什么选择?

4

1 回答 1

-1

你得到了一个很大的“XML”。您可以在反序列化之前使用 XML 转换来纠正它。

于 2016-06-23T11:40:55.553 回答