16

C#で次の名前と値のペアの文字列を解析するにはどうすればよいですか?

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

この配列を解析する目的は、LinqtoSQLを使用して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コンテキストは必要ありません。

(これらの2つの質問がリンクされていない理由はわかりません)

次のコードを使用して、a = 1&b = 2&c=3の形式の文字列を解析できました。

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