我不能访问所有json数据,它是由json.net反序列化。我如何访问它。当我在控制台中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);
您拥有的JSON字符串不能按您想要的方式解析。试试这个:
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格式
原因是这里少了一个类:
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