如何在c#中访问数据json.net数组

时间:2015-10-10 16:56:40

标签: c# json json.net

我无法访问json.net反序列化的所有json数据。 我该如何访问它。当我在控制台中使用WriteLine时它为空。

Account.cs

public class Account
{
public string Email { get; set; }
public bool Active { get; set; }
public DateTime CreatedDate { get; set; }
public IList<string> Roles { get; set; }
}

主要班级

 string json2 = @"{'Accounts' :[{
 'Email': 'james@example.com',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin']
},
{
 'Email': 'james@example.com2',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'Userz',
    'Adminz'
  ]
}]}";

    List<Account> account = new List<Account>();
    account.Add(JsonConvert.DeserializeObject<Account>(json2));


    // james@example.com
    Console.Write(account[0].Email);

2 个答案:

答案 0 :(得分:1)

原因是你在这里缺少一个课程:

public class Root
{
    public List<Account> Accounts { get; set; }
}

您需要此类,因为您的JSON具有一个名为Accounts的属性,因此您需要在C#代码中使用它才能成功反序列化。

然后你使用这样的代码反序列化这个对象:

var root = JsonConvert.DeserializeObject<Root>(json2);

// you can access first element by using
Console.Write(root.Accounts[0].Email);    //prints james@example.com

答案 1 :(得分:1)

您无法以您想要的方式解析您拥有的JSON字符串。 Try this instead

using System;
using System.Collections.Generic;
using Newtonsoft.Json;

public class Program
{
    public static void Main()
    {
        string json2 = @"[{
     'Email': 'james@example.com',
      'Active': true,
      'CreatedDate': '2013-01-20T00:00:00Z',
      'Roles': [
        'User',
        'Admin']
    },
    {
     'Email': 'james@example.com2',
      'Active': true,
      'CreatedDate': '2013-01-20T00:00:00Z',
      'Roles': [
        'Userz',
        'Adminz'
      ]
    }]";

    List<Account> account = new List<Account>();
    account.AddRange(JsonConvert.DeserializeObject<List<Account>>(json2));


    // james@example.com
    Console.Write(account[0].Email);
    }
}

public class Account
{
    public string Email { get; set; }
    public bool Active { get; set; }
    public DateTime CreatedDate { get; set; }
    public IList<string> Roles { get; set; }
}

编辑:或实际上@dotnetom提供的答案解决了您的问题,以防您无法控制json格式