【问题标题】:Add multiple items in JSON array to object in C# using Json.net使用 Json.net 将 JSON 数组中的多个项目添加到 C# 中的对象
【发布时间】:2011-01-20 20:50:10
【问题描述】:

谁能告诉我如何反序列化包含多个属性的对象?

鉴于以下场景,代码运行良好。

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" 
            } 
        } 
    ] 
}

【问题讨论】:

  • 如果你的Person 类也被Address 类属性扩展,那么你不需要做任何事情。否则你是说它没有,而你现在有了这个“额外”的属性?

标签: c# json.net deserialization


【解决方案1】:

这样的事情过去对我有用:

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;}
}

【讨论】:

    【解决方案2】:

    你可以使用匿名类型。

    var template = new { data = new Person[] { } };
    Person[] emps = JsonConvert
        .DeserializeAnonymousType(json, template)
        .data;
    

    【讨论】:

      【解决方案3】:

      反序列化为:

      public class JsonData
      {
        public List<Person> Data {get;set;}
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多