我可以使XmlSerializer在反序列化时忽略名称空间吗?

我可以使XmlSerializer在反序列化时忽略名称空间(xmlns属性),以便无论是否添加该属性,或者即使该属性是伪造的,都无关紧要?我知道源将始终受到信任,因此我不在乎xmlns属性。

回答:

是的,您可以告诉XmlSerializer在反序列化期间忽略名称空间。

定义一个XmlTextReader忽略名称空间。像这样:

// helper class to ignore namespaces when de-serializing

public class NamespaceIgnorantXmlTextReader : XmlTextReader

{

public NamespaceIgnorantXmlTextReader(System.IO.TextReader reader): base(reader) { }

public override string NamespaceURI

{

get { return ""; }

}

}

// helper class to omit XML decl at start of document when serializing

public class XTWFND : XmlTextWriter {

public XTWFND (System.IO.TextWriter w) : base(w) { Formatting= System.Xml.Formatting.Indented;}

public override void WriteStartDocument () { }

}

这是一个示例,说明如何使用该TextReader反序列化:

public class MyType1 

{

public string Label

{

set { _Label= value; }

get { return _Label; }

}

private int _Epoch;

public int Epoch

{

set { _Epoch= value; }

get { return _Epoch; }

}

}

String RawXml_WithNamespaces = @"

<MyType1 xmlns='urn:booboo-dee-doo'>

<Label>This document has namespaces on its elements</Label>

<Epoch xmlns='urn:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>0</Epoch>

</MyType1>";

System.IO.StringReader sr;

sr= new System.IO.StringReader(RawXml_WithNamespaces);

var o1= (MyType1) s1.Deserialize(new NamespaceIgnorantXmlTextReader(sr));

System.Console.WriteLine("\n\nDe-serialized, then serialized again:\n");

s1.Serialize(new XTWFND(System.Console.Out), o1, ns);

Console.WriteLine("\n\n");

结果是这样的:

    <MyType1>

<Label>This document has namespaces on its elements</Label>

<Epoch>0</Epoch>

</MyType1>

以上是 我可以使XmlSerializer在反序列化时忽略名称空间吗? 的全部内容, 来源链接: utcz.com/qa/405064.html

回到顶部