XML序列化 - 将部分XML留作XmlElement

时间:2016-04-21 15:41:12

标签: c# xml serialization

我有一个像这样的对象:

if ($_POST) {
    foreach($_POST['groupname'] as $groupname) {
        $$groupname = array();

        foreach($_POST['variable'][$groupname] as $variable) {
            ${$groupname}[] = $variable;
        }
    }

    var_dump($groupone);
    var_dump($grouptwo);
}

我是从一块看似如下的XML块生成的:

public class MyClass {
  public string AValue {get;set;}
  public XmlElement AdditionalConfig {get;set;}
}

如果我使用XmlSerializer对XML进行反序列化,则AdditionalConfig XmlElement属性为NewNode。现在,如果我在那里添加第二个元素:

<MyClass>
  <AValue>Something</AValue>
  <AdditionalConfig>
    <NewNode Att="Value" />
  </AdditionalConfig>
</MyClass>

反序列化不起作用 - 它抱怨一个无法识别的元素'AnotherNewNode'。

我尝试将MyClass.AdditionalConfig作为一个数组,但没有运气。如何将节点的所有内容都放入XmlElement对象?

一如既往,非常感谢

1 个答案:

答案 0 :(得分:1)

我不确定为什么这样做不起作用。但是,要获得所需的功能,您可以为您的其他元素引入AdditionalConfig容器类,如下所示:

public class AdditionalConfig
{
    [XmlAnyAttribute]
    public XmlAttribute[] attributes;
    [XmlAnyElement]
    public XmlElement[] elements;
}

public class MyClass
{
    public string AValue { get; set; }
    public AdditionalConfig AdditionalConfig { get; set; }
}
当应用于XmlElementXElement类型的数组时,

[XmlAnyElement]会捕获要反序列化的XML中的所有未知元素。同样,如果需要,[XmlAnyAttribute]会将<AdditionalConfig>元素的未知属性捕获到XmlAttribute数组中。

原型fiddle