C# 字符串解析到模型(RegEx模型绑定器?)
除了自己编写一堆样板代码进行绑定之外,还有什么优雅的方法可以将字符串绑定到模型吗?基本上,我有一个通过telnet连接到第三方设备的命令行界面。我正在构建一个web服务,以便将此CLI公开给外部应用程序。通过telnet发出命令后,我得到一个响应字符串,需要将其解析为一个模型 例如:C# 字符串解析到模型(RegEx模型绑定器?),c#,regex,model,bind,C#,Regex,Model,Bind,除了自己编写一堆样板代码进行绑定之外,还有什么优雅的方法可以将字符串绑定到模型吗?基本上,我有一个通过telnet连接到第三方设备的命令行界面。我正在构建一个web服务,以便将此CLI公开给外部应用程序。通过telnet发出命令后,我得到一个响应字符串,需要将其解析为一个模型 例如: /> echosnd -if 1 -dn 5551234567 Echo Sounder Test created on Interface CITYCOTTNNN-5ES, Resource 12 with
/> 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; }
}
公共类ConfigureTestResponse
{
[CLIResponse(RegEx=“接口(?[a-zA-Z0-9]*”)]
公共字符串接口{get;set;}
[CLIResponse(RegEx=“Resource(?[0-9]*)”)
公共int资源{get;set;}
[CLIResponse(RegEx=“#”(?[0-9]*)”)
公共int TestId{get;set;}
}
首先,我创建了CLIResponseAttribute来保存该属性的正则表达式过滤器(尽管上面的过滤器很可能不起作用-我将它们插入以进行说明,只测试了TestId[一点])。我可以使用正则表达式将它们拆分为组,并以这种方式设置属性,但我需要处理一系列转换(int32、int64、十进制、字符串、复杂模型等)基于属性类型。我希望有某种绑定,我可以提供一个名称/值对,它可以进行适当的绑定-或者更好的绑定
有类似的吗?我想使用MVC DefaultModelBinder,但是使用它会有很大的开销。处理复杂类型(和列表)会很好我不想做的是为每个命令编写特定的解析器,因为每个命令返回的结果格式略有不同
谢谢
(编辑:我想将正则表达式移动到类的一个属性中,以便能够对字符串进行IsMatch。使用组,我假设我仍然可以将输出绑定到属性。)不,没有什么魔法可以帮你做到这一点。最好开始吧!)