Vla*_*lov 2 c# arrays xml-serialization
假设我有以下类结构:
[XmlInclude(typeof(CustomNode))]
[XmlInclude(typeof(CustomNode2))]
[XmlRoot("node")]
class Node
{
[XmlElement("node")]
public Node[] Children { get; set; }
}
[XmlRoot("custom-node")]
class CustomNode : Node { }
[XmlRoot("custom-node-2")]
class CustomNode2 : Node { }
Run Code Online (Sandbox Code Playgroud)
我创建了以下结构:
var root = new Node { Children = new Node[2] };
root.Children[0] = new CustomNode();
root.Children[1] = new CustomNode2();
Run Code Online (Sandbox Code Playgroud)
当我Xml序列化这个结构时,我得到以下输出:
<node>
<node xsi:Type="CustomNode"/>
<node xsi:Type="CustomNode2"/>
</node>
Run Code Online (Sandbox Code Playgroud)
但我想看到(并能够正确加载)这样的东西:
<node>
<custom-node/>
<custom-node-2/>
</node>
Run Code Online (Sandbox Code Playgroud)
是否可以用于XmlSerializer?整个问题是因为我打算手动创建source xml,并且我试图让它变得更加人性化和友好.
我为你的问题找到了一个解决方案,几乎是你需要的:
[XmlRoot(ElementName = "node")]
public class Node
{
[XmlArrayItem(typeof(CustomNode), ElementName = "custom-node")]
[XmlArrayItem(typeof(CustomNode2), ElementName = "custom-node-2")]
public List<Node> Children { get; set; }
}
[XmlRoot(ElementName = "custom-node")]
public class CustomNode : Node { }
[XmlRoot(ElementName = "custom-node-2")]
public class CustomNode2 : Node { }
Run Code Online (Sandbox Code Playgroud)
结果是:
<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Children>
<custom-node />
<custom-node-2 />
</Children>
</node>
Run Code Online (Sandbox Code Playgroud)
希望有点帮助.
| 归档时间: |
|
| 查看次数: |
3009 次 |
| 最近记录: |