2011-02-16 81 views
0

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

一个简单的例子:

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

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

我试图解析如下:

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

我想要的内容属性被设置为"<SomeOtherXml />",但我似乎无法得到这个工作。我不想封装CDATA或类似的内容。

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

感谢

+0

你可以使用正则表达式来解析它,但我猜你已经知道了。 – 2011-02-16 17:07:03

回答

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() { } 
} 

希望这会有所帮助。

相关问题