我遇到一种情况,我的xml可以将FileWriter或ArgonWriter作为XML元素。
例如:
<Writer>
<FileWriter>
<DestinationFolder></DestinationFolder>
</FileWriter
</Writer>
或
<Writer>
<HttpWriter>
<Url></Url>
</Writer>
我们在FileWriter和HttpWriter之间没有任何关系,也没有继承公共接口或类
我可以编写一个映射类来序列化/DeS编写器设置,如下所示
[Serializable]
public class Writer
{
[XmlElement]
public FileWriter {get;set;}
[XmlElement]
public HttpWriter{get;set;}
}
但在这种情况下,其中一个编写器对象始终为 null
有什么方法可以让我在不需要提及两个对象的地方放置一个通用代码,因为我的根将始终只有一个 xml 元素?
使用 LINQ2XML
XDocument doc=XDocument.Parse(xmlString);
var output=doc.Descendants()
.Elements()
.Where(x=>x.Name.LocalName=="FileWriter"||x.Name.LocalName =="HttpWriter")
.Select(e=>
new
{
Type=e.Name.LocalName.ToString(),
Path=(x.Element("DestinationFolder")!=null)
? x.Element("DestinationFolder").Value
: x.Element("Url").Value
});
您现在可以迭代输出
foreach(var writer in output)
{
writer.Type;
writer.Path;
}