Проанализировать строку с парами имя-значение
Как я могу проанализировать следующую строку пары имя-значение в С#:
string studentDetail = "StudentId=J1123,FirstName=Jack,LastName=Welch,StudentId=k3342,FirstName=Steve,LastName=Smith"
Цель анализа этого массива - вставить значения в DB с использованием Linq в SQL:
[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();
}
Каков наилучший способ приблизиться к этому?
Ответы
Ответ 1
Вы можете разделить на запятую, а затем на знак равенства. Я поместил данные в словарь для легкого доступа.
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"];
Обратите внимание, что это вовсе не проверяет ввод, чтобы гарантировать отсутствие запятых в значениях, ключей без значений, пропущенных ключей и т.д.
Ответ 2
Поскольку отдельные записи студентов не ограничены во входных данных, я бы сделал следующее:
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;
}
Опять же, это немного наивно, потому что если контент содержит "=", "," или "|", будут сбои. Вы также должны добавить некоторые проверки.
Ответ 3
string sourceStr= "StudentId=J1123,FirstName=Jack,LastName=Welch,StudentId=k3342,FirstName=Steve,LastName=Smith";
Dictionary<string,string> names=new Dictionary<string,string>();
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
Ответ 4
Эрик Петроэлье очень хорошо ответил на fooobar.com/info/424004/...
Попробуйте System.Web.HttpUtility.ParseQueryString, проходя мимо всего после вопроса знак. Вам нужно будет использовать System.Web сборку, но для этого не требуется веб-контекст.
(Я не уверен, почему эти два вопроса не связаны)
Мне удалось проанализировать строку формы a = 1 & b = 2 & c = 3, используя следующий код
NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(submission);