反序列化 XML 文档

本文关键字:文档 XML 反序列化 | 更新日期: 2023-09-27 18:30:34

我正在尝试将xml文档反序列化为C#类。

    <?xml version="1.0" encoding="utf-8"?>
<Exclusionpolicys>
  <Exclusionpolicy>
    <ValuationRoutes>
      <ValuationRoute>value1</ValuationRoute>
      <ValuationRoute>Value2</ValuationRoute>
    </ValuationRoutes>
    <ExcludeHives>
      <ExcludeHive name="samplename1"/>
      <ExcludeHive name="samplename2"/>
      <ExcludeHive name="samplename3"/>
      <ExcludeHive name="samplename4"/>
    </ExcludeHives>
  </Exclusionpolicy>
  <Exclusionpolicy>
    <ValuationRoutes>
      <ValuationRoute>Value3</ValuationRoute>
    </ValuationRoutes>
    <ExcludeHives>
      <ExcludeHive name="samplename5"/>
    </ExcludeHives>
  </Exclusionpolicy>
</Exclusionpolicys>

这是我创建的类。

 [XmlRootAttribute("Exclusionpolicys")]
    public class ExclusionPolicys
    {
        [XmlElement("ExcludeHive ")]
        public ExcludedPolicyHives[] ExcludedHives { get; set; }
        [XmlElement("ValuationRoute")]
        public ExcludedPolicyValuationRoute[] ValuationRoutes { get; set; }
    }

    public class ExcludedPolicyHives : IExcludedHives
    {
        public List<string> Hives { get; set; }
    }
    public class ExcludedPolicyValuationRoute
    {
        public List<string> ValuationRoutes { get; set; }
    }

当我反序列化它时...它不会抛出任何错误,但给我一个 ExclusionPolicys 的对象,两个属性的值均为空值。

任何人都可以帮助确定我的类定义有什么问题。

我想将其反序列化为键值对列表/数组或类似内容。

提前谢谢。

感谢您的帮助。工作副本在这里...

[XmlRoot("Exclusionpolicys")]
    public class ExclusionPolicys
    {
        [XmlElement("Exclusionpolicy")]
        public List<Exclusionpolicy> Exclusionpolicy { get; set; }
    }
    public class Exclusionpolicy
    {
        [XmlElement("ValuationRoutes")]
        public List<ExcludedPolicyValuationRoutes> ValuationRoutes { get; set; }
        [XmlElement("ExcludeHives")]
        public List<ExcludedHiveses> ExcludedHives { get; set; }
    }
    [XmlRoot("ExcludeHives")]
    public class ExcludedHiveses 
    {
        [XmlElement(ElementName = "ExcludeHive")]
        public List<string> Hives { get; set; }
    }
    public class ExcludedPolicyValuationRoutes 
    {
        [XmlElement("ValuationRoute")]
        public List<string> ValuationRoute { get; set; }
    }

反序列化 XML 文档

将类库更改为以下代码,因为 XML 反序列化必须与 XML 一致,即:类库必须直接反映 XML 代码。

    [XmlRoot("Exclusionpolicys")]
    public class ExclusionPolicys
    {
        [XmlElement("Exclusionpolicy")]
        public List<Exclusionpolicy> Exclusionpolicy;
    }
    public class Exclusionpolicy
    {
        [XmlElement("ValuationRoutes")]
        public List<ExcludedPolicyValuationRoutes> ValuationRoutes { get; set; }
        [XmlElement("ExcludeHives")]
        public List<ExcludedPolicyHives> ExcludedHives { get; set; }
    }
    public class ExcludedPolicyHives
    {
        [XmlElement("ExcludeHive")]
        public List<ExcludedPolicyHive> ExcludedPolicyHive;
    }
    public class ExcludedPolicyValuationRoutes
    {
        [XmlElement("ValuationRoute")]
        public List<ValuationRoute> ValuationRoute { get; set; }
    }
    public class ExcludedPolicyHives
    {
        public string Hives { get; set; }
    }
    public class ExcludedPolicyValuationRoute
    {
        public string ValuationRoutes { get; set; }
    }

Visual Studio 2012中内置了一个转换工具 - 我不知道它与其他VS的外观如何。

  1. 使用 .Net Framework>=4.5 创建任何新项目。
  2. 将 XML 复制到剪贴板。
  3. 选择"编辑"->"选择性粘贴"->"将 XML 粘贴为类"。

现在您已经生成了类,您不必手动创建它。