【发布时间】:2015-06-03 19:23:58
【问题描述】:
我正在尝试使用以标记为XmlRoot 的类开头并包含具有所需属性的类和成员的类层次结构,使用 C#/.NET 3.5 反序列化传入的 XML 数据。到目前为止,这有效。
现在我遇到的输入数据大致如下:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:foo xmlns:ns1="http://some.name/space">
<ns1:bar>
<payload interesting="true">
<stuff type="interesting"/>
</payload>
</ns1:bar>
</ns1:foo>
最外面的两个元素 - ns1:foo 和 ns1:bar - 是我无法控制的远程系统中的序列化过程的结果。它们总是存在于完全相同的星座中,并且毫无意义。
按照我目前的方法,我可以编写一个引用 class Bar 的 class Foo,而 class Bar 又引用 class Payload。但是,由于我对 foo 和 bar 元素不感兴趣,有没有办法在反序列化期间跳过它们并让反序列化器只返回有效负载?如果不是:是否可以使用XmlRoot(ElementName = "foo", Namespace = "http://some.name/space") 属性创建class FooPayload,然后以某种方式跳过bar 和payload 级别,以便FooPayload 类直接包含名为Interesting 和Stuff 的属性?
【问题讨论】:
-
您是否考虑过首先在 XML 上使用 LINQ (msdn.microsoft.com/en-us/library/bb943906.aspx),然后再序列化该对象?
-
@Ruskin:不,还没有 - 从 .NET 3.5 开始,这项技术是否可用?
-
@vwegerl:是的,它已经有一段时间了。您肯定会发现修剪原始 XML 然后在其上运行标准序列化程序很有用。虽然我不知道性能。 (注意:我不愿意写解决方案:))
标签: c# .net xml deserialization xml-deserialization