如何解析没有分隔符的键值对字符串?

How do I parse a string for key value pairs with no delimiters?

如何在 C# 中解析字符串以提取键值对且键值对之间没有任何分隔符?

我有一个看起来像这样的字符串

string str = "\nFIRSTNAMEJOHN\nLASTNAMESMITH\nADDRESS1590 GRACE STREET\nBIRTHDATE04201969"

在 \n 拆分后,我得到了一组看起来像

的字符串
string[] properties = ["FIRSTNAMEJOHN","LASTNAMESMITH", etc.]

我想遍历这些字符串的拆分数组并从每个单独的字符串中提取键值对,以便我可以填充对象的属性,例如...

Person person = new Person() 
{ FIRSTNAME = JOHN,
  LASTNAME = SMITH,
  etc...
}

最干净的方法是什么?谢谢!

你可以创建一个具有这些属性的class,然后通过反射获取对象的属性(因此我们可以使用循环),在\n字符上拆分字符串,然后对于每个 属性 和每个设置,如果设置以 属性 名称开头,则根据设置字符串的其余部分设置 属性 值。

例如:

class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string BirthDate { get; set; }

    public override string ToString()
    {
        return $"{FirstName} {LastName}, born on {BirthDate}, lives at: {Address}";
    }
}

public class Program
{
    static void Main(string[] args)
    {
        string str = "\nFIRSTNAMEJOHN\nLASTNAMESMITH\nADDRESS1590 GRACE STREET\nBIRTHDATE04201969";
        var user = new User();
        var properties = typeof(User).GetProperties();
        var settings = str.Split('\n');

        foreach (var property in properties)
        {
            foreach (var setting in settings)
            {
                if (setting.StartsWith(property.Name, StringComparison.OrdinalIgnoreCase))
                {
                    property.SetValue(user, setting.Substring(property.Name.Length));
                    break;
                }
            }
        }

        Console.WriteLine(user);

        GetKeyFromUser("\n\nDone! Press any key to exit...");
    }
}

输出