我正在使用XMLSerializer和一个标有属性的类生成一些XML.此XML将发送到REST Web服务.
它生成以下XML:
<?xml version="1.0" encoding="utf-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<first-name>API</first-name>
<last-name>TestPersonDeleteMe</last-name>
<title>Delete me</title>
</person>
Run Code Online (Sandbox Code Playgroud)
一切都会好的,除了我正在使用的Web服务不理解架构的东西并抛出500错误.
有没有办法阻止XmlSerializer添加'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"'到person标签?
我在所有相同的模式/结构之后获得了数千个XML文件.我实现了IXmlSerializable,因此我自己阅读元素和属性.
我的问题是这些文件都使用不同的虚假命名空间.这些文件来自另一个来源,所以我无法改变它:D另外,对于我来说,有太多这些命名空间只是构建一个可能的命名空间数组并将其传递给xmlserializer.
现在,如果我没有指定命名空间,它会抛出[xmlns:ns0 ="http://tempuri.org/abcd.xsd"不是预期的]错误.
我希望能够告诉序列化程序在反序列化我的对象时只是忽略命名空间并且只需触发ReadXML.或者只是能够告诉它接受任何"http://tempuri.org/"命名空间.
那可能吗?
我想尽量避免修改文件.
谢谢!
我有一个看起来像这样的测试xml文件:
<Person>
<ContactInfo>
...
<ContactInfo>
</Person>
Run Code Online (Sandbox Code Playgroud)
当我尝试反序列化时,一切正常。但问题是有时这个xml文件的结构不同——有时添加xml命名空间。
<Person xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<ContactInfo>
...
<ContactInfo>
</Person>
Run Code Online (Sandbox Code Playgroud)
现在,当我进行序列化时,我收到 IOnvalidOperationException:“XML 文档 (1, 2) 中存在错误”。内部异常消息说<Person xmlns='http://tempuri.org/PaymentInformationXml.xsd'>不是预期的。
那么有人可以帮我解决这个问题吗?
我想使用一个XmlTextReader忽略命名空间并且不检查字符的。要忽略命名空间,我可以设置属性Namespaces=false而不检查字符,我可以使用XmlReaderSettings.CheckCharacters = false.
我尝试创建XmlTextReaderusing it 构造函数,但这不允许我传入配置的XmlReaderSettings. 该属性Settings是只读的,因此我无法在构建后设置它。
XmlTextReader reader = new XmlTextReader(gzs) { Namespaces = false};
reader.Settings = new XmlReaderSettings { CheckCharacters = false}; // readonly
Run Code Online (Sandbox Code Playgroud)
使用Create()基类的静态方法,XmlReader我可以传入XmlReaderSettings,但该方法返回 aXmlTextReaderImpl并且没有Namespace要设置的属性,并且不能强制转换为XmlTextReader。
var settings = new XmlReaderSettings { CheckCharacters = false};
var reader = XmlTextReader.Create(gzs, settings);
XmlTextReader textReader = reader as XmlTextReader // not possible
Run Code Online (Sandbox Code Playgroud)
那么如何创建这样的 XmlTextReader 呢?甚至有可能吗?是否有任何属性XmlReaderSettings可以忽略命名空间?