0

我有一种情况,我的 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;}

} 

但在这种情况下,Writer 对象之一始终为 null

有什么方法可以为我不需要提到两个对象的地方放置一个通用代码,因为我的根总是只有一个 xml 元素?

4

1 回答 1

0

使用 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;
}
于 2013-09-20T11:46:15.970 回答