【问题标题】:XML Serialization within derived class派生类中的 XML 序列化
【发布时间】:2014-04-02 12:15:57
【问题描述】:

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

我想要达到的是这个

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

我当前的实现涉及到一个“CalculationInputs”类,其中包含一个“输入”列表和一个单一的键类型,即

[XmlRoot("CalculationInputs")]
public class CalculationInputs
{
...

[XmlElement("Key")]
public Key Key { get; set; }

// InputList
[XmlElement("Input")]
public List<Input> InputList { get; set; }

...

}

但是我想通过像这样的列表 CalculationInputs 类来简化这一点

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

遗憾的是,它只有 50% 有效。扩展列表很好地去串了..但是'Key'元素被忽略了,我明白了

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

有人指点吗?

另外,为了加分 - 反序列化时我可以有许多 Key 标签,它使用第一个并忽略其余部分,即

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

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

谢谢。

【问题讨论】:

    标签: c# .net xml serialization deserialization


    【解决方案1】:

    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>
    

    【讨论】:

    • 这有什么帮助不是很明显吗?您没有使用派生类,实际上建议的类比我要替换的类更复杂 - 输出的 xml 也是如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多