派生类中的 XML 序列化

本文关键字:XML 序列化 派生 | 更新日期: 2023-09-27 17:56:04

我希望在反序列化之前整理我用来保存xml数据的类。

我想得到的是这个

<CalculationInputs>
  <Key Name="Keyname" Value="keyname" />
  <Input Name="InputName" Value="InputValue" />
  <Input Name="InputName2" Value="InputValue2" />
</CalculationInputs>

我目前的实现涉及拥有一个"ComputingInputs"类,其中包含"输入"列表和单个键类型,即

[XmlRoot("CalculationInputs")]
public class CalculationInputs
{
...
[XmlElement("Key")]
public Key Key { get; set; }
// InputList
[XmlElement("Input")]
public List<Input> InputList { get; set; }
...
}

但是我想通过像这样的列表计算输入类来简化它

[XmlRoot("CalculationInputs")]
        public class CalculationInputs: List<Input>
        {
            [XmlElement("Key")]
            public Key Key { get; set; }
...
}

可悲的是,它只有 50% 有效。扩展列表解脱了精细..但是"键"元素被忽略了,我得到了这个

<CalculationInputs>
  <Input Name="InputName" Value="InputValue" />
  <Input Name="InputName2" Value="InputValue2" />
</CalculationInputs>

有人有任何指示吗?

此外,对于额外的分数 - 反序列化时我可以有很多 Key 标签,它使用第一个并忽略其余的,即

  <Key Name="Keyname" Value="keyname" />
  <Key Name="Keyname2" Value="keyname2" />

而对我来说,如果在反序列化它时抛出异常会更好,因为 Key 不是列表。

谢谢。

派生类中的 XML 序列化

c#

 [XmlRoot("CalculationInputs")]
  public class CalculationInputs
   {
  [XmlElement("Key")]
  public Key Key { get; set; }
  // InputList
  [XmlArray("array")]
  [XmlArrayItem("Input")]
  public List<Input> Input { get; set; }
  }
    public class Key
    {
        [XmlAttribute("Name")]
        public string Name { get; set; }
        [XmlAttribute("Value")]
        public string Value { get; set; }
     }
    public class Input
    {
        [XmlAttribute]
        public string Name { get; set; }
        [XmlAttribute]
        public string Value { get; set; }
    }

并像下面一样更改您的 Xml

<CalculationInputs>
  <Key Name="Keyname" Value="keyname" /> 
  <array>
  <Input Name="InputName" Value="InputValue" />
  <Input Name="InputName2" Value="InputValue2" />
  </array>
</CalculationInputs>