.net - 将字符串解析为具有不同字段名称(键值)的实体
问题描述
我有这样的字符串消息:8=ABCD 5=DCBA 88=2 39=D
我有一个实体:
public class Order : Entity {
public string Account {get;set;}
public char Type {get;set;}
public string Status {get;set;}
public string Something {get;set;}
}
并且实体的每个属性都等于字符串模式的一个个数
8 = Account;
5 = Type;
88 = Status;
39 = Something;
我需要将字符串模式解析为 Order 实体。
任何人都知道这样做的解决方案吗?没有循环或类似的东西
解决方案
没有内置任何东西;你必须自己解析它;例如:
using System;
using System.Linq;
using System.Text.RegularExpressions;
static class P
{
static void Main()
{
string input = "8=ABCD 5=DCBA 88=2 39=D";
var obj = new Order();
foreach (Match match in Regex.Matches(input, @"(?<=(\s|^))(?'key'[0-9]+)=(?'value'\S+)(?=($|\s))"))
{
var val = match.Groups["value"].Value;
switch (match.Groups["key"].Value)
{
case "8":
obj.Account = val;
break;
case "5":
obj.Type = val.FirstOrDefault(); // D from "DCBA" in the example
break;
case "88":
obj.Status = val;
break;
case "39":
obj.Something = val;
break;
}
}
Console.WriteLine(obj.Account); // ABCD
Console.WriteLine(obj.Type); // D
Console.WriteLine(obj.Status); // 2
Console.WriteLine(obj.Something); // D
}
}
public class Entity { }
public class Order : Entity
{
public string Account { get; set; }
public char Type { get; set; }
public string Status { get; set; }
public string Something { get; set; }
}
至于“没有循环”:您基本上是在这里挑选多个令牌;您可以尝试编写没有循环的方法,但坦率地说,这似乎不是一个明智的目标。
推荐阅读
- r - R中的for循环问题
- angular - Angular GET http://localhost/ 401(未经授权)错误
- typescript - 您可以在对象上强制使用键,但让打字稿推断值的类型吗?
- java - Intellij 从 gui 表单构建项目时给我一个错误
- ruby-on-rails - 有没有办法使用 griddler 来解决 Heroku 中的 H12 超时问题,以解析来自 sendgrid 的带有大附件的入站消息
- javascript - 为什么我们被迫将 keepSynced 与 firebase 数据库一起使用?
- string - 使用正则表达式在powershell中提取子字符串
- google-sheets - 如何使用条件格式与动态工作表进行比较?
- reactjs - 在“连接”上使用未使用的“mergedProps”参数会在组件渲染上引发错误
- css - 如何在 Primefaces 数据表中显示图标而不是数据?