簡體   English   中英

如何使用 .NET XML 序列化正則表達式類型

[英]How to serialize a regular expression type using .NET XML serialization

如何將 XML 中的字符串序列化為Regex類型的 class 屬性?

這是 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>

在我序列化的 class 中,我具有以下屬性:

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

class 的 rest 序列化沒有問題,但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 function 的設置器中設置這些屬性。 這行得通,但是我可以在沒有重復屬性的情況下做到這一點嗎?

我認為你不能用常規的 XML 序列化來做到這一點,你必須實現IXmlSerializable來直接控制序列化。

問題是,Regex 不能被序列化。 這可以通過實現IXmlSerializable來解決。 由於您無法更改正則Regex class,因此您必須在另一個 class 中處理它。 你也許可以做這樣的事情(未經測試,在我腦海中):

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

現在您必須實現接口並且必須使用 class 而不是正則表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM