5

複数の属性を含むオブジェクトを逆シリアル化する方法を教えてもらえますか?

以下のシナリオでは、コードは正常に機能します。

public ActionResult Index()
{
    string json = @"{""name"": ""Person 2"",""email"": ""example@example.com""}";

    var emp = JsonConvert.DeserializeObject<Person>(json);
    Response.Write(emp.name + emp.email);
    return View();
}

public class Person
{
    public string name { get; set; }
    public string email { get; set; }
}

しかし、配列に複数のアイテムが含まれている場合はどうすればよいですか。

string json = @"{""data"": [{""name"": ""Person 1"",""email"": ""test@test.com""},{""name"": ""Person 2"",""email"": ""example@example.com""}]}";

前もって感謝します

以下に既に示した回答は、私が尋ねた問題にぴったりでしたが、今では一歩先を行っています。jsonに配列が含まれている場合、たとえばアドレスの追加など、私が何をする必要があるかについて誰かアドバイスできますか?

{
    "data": [
        {
            "name": "Person 1",
            "email": "test@test.com",
            "address": {
                "address1": "my address 1",
                "address2": "my address 2" 
            } 
        },
        {
            "name": "Person 2",
            "email": "example@example.com",
            "address": {
                "address1": "my address 1",
                "address2": "my address 2" 
            } 
        } 
    ] 
}
4

3 に答える 3

5

このようなものは、過去に私のために働いていました:

JObject o = JObject.Parse(json); // This would be the string you defined above
// The next line should yield a List<> of Person objects...
List<Person> list = JsonConvert.DeserializeObject<List<Person>>(o["data"].ToString());

Person オブジェクトを次のように装飾することができます。

[JsonObject(MemberSerialization.OptIn)]
public class Person
{
    [JsonProperty]
    public string name{get;set;}
    [JsonProperty]
    public string email{get;set;}
}
于 2011-01-20T21:09:58.573 に答える
3

匿名型を使用できます。

var template = new { data = new Person[] { } };
Person[] emps = JsonConvert
    .DeserializeAnonymousType(json, template)
    .data;
于 2011-01-20T22:29:24.040 に答える
1

次のように逆シリアル化します。

public class JsonData
{
  public List<Person> Data {get;set;}
}
于 2011-01-20T21:34:27.100 に答える