16

如何在 C# 中解析以下名称-值对字符串:

string studentDetail = "StudentId=J1123,FirstName=Jack,LastName=Welch,StudentId=k3342,FirstName=Steve,LastName=Smith"

解析这个数组的目的是使用 Linq to SQL 在 DB 中插入值:

[HttpPost]
public ActionResult SaveStudent(string studentDetail)
{
    DataContext db = new DataContext();         

    Student student = new Student();
    {
        student.StudentID = //StudentID
        student.FirstName = //FirstName
        student.LastName = //LastName
    };

    db.Student.InsertOnSubmit(student);
    db.SubmitChanges();

    return View();
}

解决这个问题的最佳方法是什么?

4

3 回答 3

49

您可以在逗号上拆分,然后在等号上拆分。我将数据放入字典以便于访问。

string input = "StudentId=J1123,FirstName=Jack,LastName=Welch";

Dictionary<string,string> keyValuePairs = input.Split(',')
  .Select(value => value.Split('='))
  .ToDictionary(pair => pair[0], pair => pair[1]);

string studentId = keyValuePairs["StudentId"];

请注意,这根本不验证输入以确保值中没有逗号,没有没有值的键,缺少键等。

于 2012-07-26T16:37:28.400 回答
5

因为各个学生记录在输入中没有分隔,所以我会执行以下操作:

public class Student
{
    public string Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
} 

接着:

private List<Student> DoSplit(string input)
{
    var theReturn = new List<Student>();
    input = input.Replace(",StudentId=", "|,StudentId=");

    var students = input.Split('|');

    foreach (var student in students)
    {
        var attribs = student.Split(',');
        if (attribs.Count() == 3)
        {
            var s = new Student();
            s.Id = attribs[0].Substring(attribs[0].LastIndexOf('='));
            s.FirstName = attribs[1].Substring(attribs[1].LastIndexOf('='));
            s.LastName = attribs[2].Substring(attribs[2].LastIndexOf('='));

            theReturn.Add(s);
        }
    }

    return theReturn;
}

同样,这有点幼稚,因为如果内容包含“=”、“”或“|”,则会出现故障。您还应该在那里添加一些检查。

于 2012-07-26T17:04:15.747 回答
1

Eric Petroelje 在https://stackoverflow.com/a/2049079/59996有一个非常好的答案

尝试System.Web.HttpUtility.ParseQueryString,在问号后面传入所有内容。您需要使用 System.Web 程序集,但它不需要 Web 上下文。

(我不确定为什么这两个问题没有联系)

我能够使用以下代码解析格式为 a=1&b=2&c=3 的字符串

NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(submission);
于 2017-01-31T04:32:55.603 回答