我有一个像这样的对象:
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对象?
一如既往,非常感谢
答案 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; }
}
当应用于XmlElement
或XElement
类型的数组时, [XmlAnyElement]
会捕获要反序列化的XML中的所有未知元素。同样,如果需要,[XmlAnyAttribute]
会将<AdditionalConfig>
元素的未知属性捕获到XmlAttribute
数组中。
原型fiddle。