字符串解析到模型(RegEx模型绑定器?)

时间:2011-04-12 20:24:09

标签: c# regex model bind

是否有任何优雅的方法将字符串绑定到模型,缺少编写一堆样板代码来自己进行绑定?基本上我通过telnet有第三方设备的命令行界面。我正在构建一个Web服务,以将此CLI公开给外部应用程序。通过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,decimal,string,complex model等...)属性类型是。我希望有一些绑定,我可以提供一个名称/值对,它会做适当的绑定 - 或更好的东西......

有什么类似的吗?我虽然使用MVC DefaultModelBinder,但使用它会有很多开销。处理在字符串中展平的复杂类型(和列表)会很好。我不想做的就是为每个命令编写特定的解析器,因为每个命令都以稍微不同的格式返回结果。

谢谢!

(编辑:我想将正则表达式移动到类的属性上,以便能够对字符串执行IsMatch。使用组,我假设我仍然可以将输出绑定到属性。)

1 个答案:

答案 0 :(得分:0)

不,没有魔法可以为你做到。最好开始吧! :)