解析具有名称 – 值对的字符串

如何在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(); } 

接近这个的最佳方法是什么?

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

 string input = "StudentId=J1123,FirstName=Jack,LastName=Welch,StudentId=k3342,FirstName=Steve,LastName=Smith"; Dictionary keyValuePairs = input.Split(',') .Select(value => value.Split('=')) .ToDictionary(pair => pair[0], pair => pair[1]); string studentId = keyValuePairs["StudentId"]; 

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

因为个别学生记录没有在输入中分隔,我会做如下的事情:

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

然后:

 private List DoSplit(string input) { var theReturn = new List(); 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; } 

同样,它有点天真,因为如果内容包含“=”,“,”或“|”,则会出现故障。 你也应该在那里添加一些检查。

 string sourceStr= "StudentId=J1123,FirstName=Jack,LastName=Welch,StudentId=k3342,FirstName=Steve,LastName=Smith"; Dictionary names=new Dictionary(); string[] arr = sourceStr.Split(','); foreach (var ar1 in arr) { string[] itemArr= ar1.Split('='); if (itemArr.Length > 1) { names.Add(itemArr[0], itemArr[1]); } } //check names now 

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

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

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

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

 NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(submission);