Есть ли какой-нибудь элегантный способ связать строку с моделью, если не считать связку стандартного кода, чтобы выполнить связывание самостоятельно? По сути, у меня есть интерфейс командной строки к стороннему устройству через telnet. Я создаю веб-сервис для предоставления этого интерфейса командной строки внешним приложениям. После выполнения команды через telnet я получаю ответную строку и мне нужно проанализировать ее в модели.
Пример:
/> echosnd -if 1 -dn 5551234567
Echo Sounder Test created on Interface CITYCOTTNNN-5ES, Resource 12 with ID #2967232
/>
И я хочу связать эту строку, чтобы создать следующий объект:
public class ConfigureTestResponse
{
[CLIResponse(RegEx = "Interface (?<interface>[a-zA-Z0-9]*")]
public string Interface { get; set; }
[CLIResponse(RegEx = "Resource (?<resource>[0-9]*)")]
public int Resource { get; set; }
[CLIResponse(RegEx = "#(?<id>[0-9]*)")]
public int TestId { get; set; }
}
Для начала я создал CLIResponseAttribute для хранения фильтра RegEx для этого свойства (хотя приведенные выше фильтры, скорее всего, не работают - я добавил их для иллюстрации, тестируется только TestId [немного]). Я могу разделить их на группы с помощью Regex и установить свойства таким образом, но есть несколько преобразований, которые мне нужно будет обработать (int32, int64, десятичная, строковая, сложная модель и т. Д.) В зависимости от тип свойства Я надеюсь, что есть какая-то привязка, для которой я мог бы предоставить пару имя / значение, и это сделало бы соответствующую привязку - или что-то еще лучше ...
Есть что-нибудь подобное? Я хотя бы использовал MVC DefaultModelBinder, но было бы много накладных расходов на его использование. Было бы неплохо обрабатывать сложные типы (и списки), которые сведены в строку. Чего я не хочу делать, так это писать конкретные парсеры для каждой команды, так как каждая возвращает результат в несколько разных форматах.
Спасибо!
(Edit: я хотел бы переместить регулярное выражение в атрибут класса, чтобы иметь возможность сделать IsMatch для строки. Используя группы, я предполагаю, что я все еще мог бы связать с выводом на свойства.)