将反序列化的 json 类转换为数据表

2024-01-12

我正在尝试使用下面的代码将反序列化为类的 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(使用前将#替换为@)

将反序列化的 json 类转换为数据表 的相关文章

随机推荐