【问题标题】:De-serialize XML files with varying XmlRoot element names反序列化具有不同 XmlRoot 元素名称的 XML 文件
【发布时间】:2019-08-20 18:29:16
【问题描述】:

我有大量需要对其执行反序列化的 XML 文件。这些文件具有不同的根名称(超过 250 个)。在访问 XML 类以检索我的数据之前,我试图通过 XmlSerializer 传递根属性名称。这是我所拥有的,但我仍然收到一个错误,即尽管 XmlElement 类正在将属性传递给 XmlSerializer 类,但需要根名称。

用于检索文件的方法:

string strXmlDoc = path;
XmlDocument objXmlDoc = new XmlDocument();
objXmlDoc.Load(strXmlDoc);
XmlElement objRootElem = objXmlDoc.DocumentElement;

XmlSerializer xmlSerial = new XmlSerializer(typeof(XMLFile), new XmlRootAttribute(objRootElem.ToString()));
StreamReader sr = new StreamReader(path);
XMLFile entity = xmlSerial.Deserialize(sr) as XMLFile;

XML 类文件:

[Serializable]
//[XmlRoot("randomname")] Removed this line since I'm getting the XmlRoot attribute in the XmlSerializer line.
public class XMLFile
{
    [System.Xml.Serialization.XmlElement("RECORD")]
    public RECORD RECORD { get; set; }
}

[Serializable]
public class RECORD
{
    [XmlElement("BK01")]
    public Record Bk01 { get; set; }

    [XmlElement("BK02")]
    public Record Bk02 { get; set; }
}

[Serializable]
public class Record
{
    [XmlAttribute("Value")]
    public string Value { get; set; }
}

【问题讨论】:

  • 你可以控制序列化的xml吗?必须是 XmlSerializer 吗?
  • 你是说要反序列化的类型总是一样的,但是XML中根元素的名字却不一样?
  • @ScottHannen - 是的,没错。
  • @MikeDev 我不会编辑 XML 文件,只会查看。

标签: c# xml xml-serialization


【解决方案1】:

改变这个:

XmlSerializer xmlSerial = 
    new XmlSerializer(typeof(XMLFile), new XmlRootAttribute(objRootElem.ToString()));

到这里:

XmlSerializer xmlSerial = 
    new XmlSerializer(typeof(XMLFile), new XmlRootAttribute(objRootElem.Name));
                                                                        ^^^

XmlElement.ToString() 将始终返回 System.Xml.XmlElement,这不是您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多