[英]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.