如何将Xml内容反序列化为字符串

时间:2011-02-16 17:00:48

标签: c# serialization xmlserializer deserialization

我正在使用XmlSerializer来反序列化配置文件。我希望能够将Xml元素的子内容提取到字符串字段中。这个子内容可以是xml本身。

一个简单的例子:

public class Configuration
{
    [XmlAttribute]
    public string MyAttribute { get; set; }

    [XmlText]
    public string Content { get; set; }
}

我正在尝试解析以下内容:

<Configuration MyAttribute="foo">
    <SomeOtherXml />
</Configuration>

我希望将Content属性设置为"<SomeOtherXml />",但我似乎无法使其工作。我不想将内容封装在CDATA或类似内容中。

这可能,还是我需要手动处理配置文件的解析?

谢谢

1 个答案:

答案 0 :(得分:1)

可以使用XmlSerializer,但需要手动解析,因此最终可能不值得。

可能还有其他更好的方法,但我发现这样做的方法是让您的Configuration类实现IXmlSerializable接口。

public class Configuration : IXmlSerializable
{
    [XmlAttribute]
    public string MyAttribute { get; set; }

    [XmlText]
    public string Content { get; set; }

    public void ReadXml(XmlReader reader)
    {
        if(reader.NodeType == XmlNodeType.Element &&
           string.Equals("Configuration", reader.Name, StringComparison.OrdinalIgnoreCase))
        {
            MyAttribute = reader["MyAttribute"];
        }

        if(reader.Read() &&
           reader.NodeType == XmlNodeType.Element &&
           string.Equals("SomeOtherXml", reader.Name, StringComparison.OrdinalIgnoreCase))
        {
            Content = reader.ReadOUterXml();  //Content = "<SomeOtherXml />"
        }
    }

    public void WriteXml(XmlWriter writer) { }
    public XmlSchema GetSchema() { }
}

希望这有帮助。