2011-06-01 123 views
6

如何將XML中的字符串序列化爲類型爲Regex的類屬性?如何使用.NET XML序列化序列化正則表達式類型

這裏的XML文件中的元素:

<IncludeRegex><![CDATA[#include\\s*\\\"\\s*(?<FileName>.+\\\\*\\.*.+)\\s*\\\"]]></IncludeRegex> 
    <IncludeDefineRegex><![CDATA[#define\s*[A-Za-z_0-9]+\s*\""\s*(?<FileName>.+\.[a-zA-Z0-9]+)\s*\""]]></IncludeDefineRegex> 

在我的課,我序列化,我有這些屬性:

public Regex IncludeRegex { get; set; } 
public Regex IncludeDefineRegex { get; set; } 

類的其他序列化沒有問題,但Regex屬性無法序列化。一種選擇是,具有替代的屬性:

public string IncludeRegex { get; set; } 
public string IncludeDefineRegex { get; set; } 
[XmlIgnore] 
public Regex IncludeRegexActual { get; private set; } 

[XmlIgnore] 
public Regex IncludeDefineRegexActual { get; private set; } 

而在IncludeRegex和IncludeDefineRegex或INIT功能的設置器設置這些屬性。這工作,但我可以做到沒有重複的屬性?

+2

你想要序列化的正則表達式的哪一部分,除了模式? – 2011-06-01 18:16:42

回答

2

我不認爲你可以用常規的XML序列化來實現這一點,你必須實現IXmlSerializable來直接控制序列化。

1

問題是,正則表達式不能被序列化。這可以通過執行IXmlSerializable來解決。由於您無法更改Regex課程,因此您必須在另一課程中處理它。您也許能夠做這樣的事情(未經測試,從我的頭):

public class MyRegEx : Regex, IXmlSerializable {...} 

現在,你必須實現該接口並有能力使用這個類,而不是正則表達式。

+1

我相信你的意思是'IXmlSerializable' – 2011-06-01 18:25:04

+0

是的,當然。謝謝!我修好了。 – Achim 2011-06-01 18:40:47