我正在尝试使用下面的代码将反序列化为类的 json 转换为数据表,但是下面的代码在最后一行失败。
using (var webClient = new System.Net.WebClient())
{
var downloadTable = webClient.DownloadString(url);
var myTable = JsonConvert.DeserializeObject<leagueTable>(downloadTable);
DataTable dt = myTable;
}
我知道我可以直接反序列化为数据表,但我想首先将其反序列化为类,以便我可以操作数据并让使用代码的其他人知道数据的结构。
JSON 是嵌套的,为其创建的类如下
public class leagueTable
{
public string leaguename { get; set; }
public int gameday { get; set; }
public System.Collections.ObjectModel.Collection<Ranking> ranking { get; set; }
}
public class Ranking
{
public int rank { get; set; }
public string club { get; set; }
public int games { get; set; }
public int points { get; set; }
}
为了将 json 字符串反序列化为 DataTable,它需要是一个 json 对象数组,其中数组中的每个第一级对象对应于一行。
例如,这会很好地工作:
string data = "[{\"FirstName\": \"John\", \"LastName\": \"Smith\"}, {\"FirstName\": \"Mohammed\", \"LastName\": \"Lee\"}]";
var dt = JsonConvert.DeserializeObject<DataTable>(data);
请注意,整个 json 字符串位于[]
。即使它是一个仅包含数组的 json 对象,它也不会工作。
如果您想先反序列化为自定义类型,那么我建议您将完全相同的 json 反序列化为List<T>
而不是数据表。
class Name
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
...
var names = JsonConvert.DeserializeObject<List<Name>>(data);
然后还有将列表转换为 DataTable 的方法 https://stackoverflow.com/questions/564366/convert-generic-list-enumerable-to-datatable。话虽如此,一旦反序列化为自定义列表类型,您是否仍想将其转换为 DataTable?如果 DataTable 用于控件上的数据绑定,则还有其他用于绑定源的选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)