首页 > 解决方案 > 将字符串解析为具有不同字段名称(键值)的实体

问题描述

我有这样的字符串消息: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 实体。

任何人都知道这样做的解决方案吗?没有循环或类似的东西

标签: .netstringmodelentity

解决方案


没有内置任何东西;你必须自己解析它;例如:

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; }
}

至于“没有循环”:您基本上是在这里挑选多个令牌;您可以尝试编写没有循环的方法,但坦率地说,这似乎不是一个明智的目标。


推荐阅读