解析具有名称 – 值对的字符串
如何在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);