C# 反序列化具有不同名称空间的xml文件
我想导入具有不同名称空间但结构相似的xml文件。我还没有找到一个适合我需要的解决方案,所以现在我在问 我如何建立忽略名称空间的机制。或者在反序列化之前如何删除标记 我收到的错误消息是:C# 反序列化具有不同名称空间的xml文件,c#,xml,namespaces,C#,Xml,Namespaces,我想导入具有不同名称空间但结构相似的xml文件。我还没有找到一个适合我需要的解决方案,所以现在我在问 我如何建立忽略名称空间的机制。或者在反序列化之前如何删除标记 我收到的错误消息是: <Root xmlns='namespace...'> was not expected. 您可以通过子类化XmlTextReader来创建一个非常简单的名称空间剥离器。对于XmlDeserializer,这个类似乎足够了: public class XmlReaderNoNamespaces :
<Root xmlns='namespace...'> was not expected.
您可以通过子类化
XmlTextReader
来创建一个非常简单的名称空间剥离器。对于XmlDeserializer
,这个类似乎足够了:
public class XmlReaderNoNamespaces : XmlTextReader
{
public XmlReaderNoNamespaces(Stream stream) : base(stream)
{
}
public override string Name => LocalName;
public override string NamespaceURI => string.Empty;
public override string Prefix => string.Empty;
}
像这样使用它:
using (StreamReader stream = new StreamReader(path))
using (var reader = new XmlReaderNoNamespaces(stream))
{
xmlObject =(FooContainer)ser.Deserialize(reader);
}
错误消息表明Xml不正确。是的,因为在我的XmlClass中我声明没有命名空间,但导入的Xml有一个命名空间。如果标记使用命名空间,则无法删除命名空间。xml变得无效。正确的方法是使xml解析动态使用文件中的名称空间或忽略名称空间。
using (StreamReader stream = new StreamReader(path))
using (var reader = new XmlReaderNoNamespaces(stream))
{
xmlObject =(FooContainer)ser.Deserialize(reader);
}