#c# #.net #xml #regex
#c# #.net #xml #регулярное выражение
Вопрос:
Как я могу сериализовать строку из XML в свойство класса типа Regex
?
Вот элементы в XML-файле:
<IncludeRegex><![CDATA[#include\s*\"\s*(?<FileName>. \\*\.*. )\s*\"]]></IncludeRegex>
<IncludeDefineRegex><![CDATA[#defines*[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 или в функции инициализации. Это работает, но могу ли я сделать это без повторяющихся свойств?
Комментарии:
1. Какую часть регулярного выражения вы хотите сериализовать, кроме шаблона?
Ответ №1:
Я не думаю, что вы можете сделать это с помощью обычной XML-сериализации, вам нужно реализовать IXmlSerializable для прямого управления сериализацией.
Ответ №2:
Проблема в том, что регулярное выражение не может быть сериализовано. Это можно решить путем реализации IXmlSerializable
. Поскольку вы не можете изменить Regex
класс, вам придется обрабатывать его в другом классе. Возможно, вы сможете сделать что-то подобное (непроверенное, из моей головы):
public class MyRegEx : Regex, IXmlSerializable {...}
Теперь вам нужно реализовать интерфейс и использовать этот класс вместо регулярного выражения.
Комментарии:
1. Я полагаю, вы имеете в виду
IXmlSerializable