[英]How to serialize a class with a complex property using XML serialization in .NET?
[英]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.