我无法访问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);
答案 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格式