Разбор строки для модели (связующее для модели RegEx?) - PullRequest
2 голосов
/ 13 апреля 2011

Есть ли какой-нибудь элегантный способ связать строку с моделью, если не считать связку стандартного кода, чтобы выполнить связывание самостоятельно? По сути, у меня есть интерфейс командной строки к стороннему устройству через 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 для строки. Используя группы, я предполагаю, что я все еще мог бы связать с выводом на свойства.)

1 Ответ

0 голосов
/ 13 апреля 2011

Нет, никакой магии, которая делает это за тебя, нет.Лучше начать!:)

...