如何使用.NET XML序列化序列化正则表达式类型

时间:2011-06-01 17:55:22

标签: c# .net xml regex

如何将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函数中设置这些属性。这有效,但我可以在没有重复属性的情况下进行吗?

2 个答案:

答案 0 :(得分:2)

我认为你不能通过常规的XML序列化来实现这一点,你必须实现IXmlSerializable来直接控制序列化。

答案 1 :(得分:1)

问题是,Regex无法序列化。这可以通过实施IXmlSerializable来解决。由于您无法更改Regex类,因此必须在另一个类中处理它。你可能会做这样的事情(未经测试,不在我的脑海中):

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

现在你必须实现该接口,并且必须使用该类而不是Regex。