如何将XML中的字符串序列化为类型为Regex
的类属性?
以下是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的setter或init函数中设置这些属性。这有效,但我可以在没有重复属性的情况下进行吗?
答案 0 :(得分:2)
我认为你不能通过常规的XML序列化来实现这一点,你必须实现IXmlSerializable来直接控制序列化。
答案 1 :(得分:1)
问题是,Regex无法序列化。这可以通过实施IXmlSerializable
来解决。由于您无法更改Regex
类,因此必须在另一个类中处理它。你可能会做这样的事情(未经测试,不在我的脑海中):
public class MyRegEx : Regex, IXmlSerializable {...}
现在你必须实现该接口,并且必须使用该类而不是Regex。