2011-02-16 82 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() { } 
} 

希望這會有所幫助。

相關問題