在反序列化XML时包含原始XML

时间:2014-05-02 00:53:43

标签: c# xml deserialization

我有以下XML和从中序列化的类:

<Alerts>
  <io id="1">
    <name>Foo</name>
    <status>Active</status>
  </io>
  <io id="2">
    <name>Bar</name>
    <status>Inactive</status>
  </io>
</Alerts>

[XmlRoot("Alerts")]
[Serializable]
public class Alerts
{
    [XmlElement("io")]
    public List<Alert> { get; set; }
}

public class Alert
{
    [XmlElement("name")]
    public string Name { get; set; }

    [XmlElement("status")]
    public string Status { get; set; }
}

我需要的是我的Alert类中的属性,在反序列化时包含其节点的XML。例如,在反序列化提供的XML之后,我最终得到了2个Alert对象的列表。我需要第一个警报,让一个属性包含这个字符串:

<io id="1">
    <name>Foo</name>
    <status>Active</status>
</io>

我是如何实现这一目标的?

1 个答案:

答案 0 :(得分:0)

我认为实际完成此操作的唯一方法是使用字符串属性,然后在xml中用实体字符引用替换xml保留字符,这样它就不会被序列化为xml。所以你的xml看起来像:

<io id="1">
    <name>Foo</name>
    <status>Active</status>
    <innerAlert>
        &lt;io id=&quot;3&quot;&gt;&lt;name&gt;FooBar&lt;/name&gt;&lt;status&gt;Inactive&lt;/status&gt;&lt;innerAlert&gt;&lt;/innerAlert&gt;&lt;/io&gt;
    </innerAlert>

我仍然继续回到我的评论,并认为你可能最好在Alert类中添加一个Alert或IEnumerable类型的属性,然后让树一直向下反序列化,但也许这不是一个选项。你。