将反序列化的json类转换为datatable

时间:2015-01-06 22:38:30

标签: c# .net json class datatable

我试图通过使用下面的代码将我反序列化的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; }
}

3 个答案:

答案 0 :(得分:0)

您是否尝试过让您的类继承自DataTable类?理想情况下,您可以操作数据并使最终结果仍为DataTable。

答案 1 :(得分:0)

要使您的json字符串反序列化为DataTable,它需要是一个json对象数组,其中数组中的每个第一级对象都对应一行。 例如,这样可以正常工作:

string data = "[{\"FirstName\": \"John\", \"LastName\": \"Smith\"}, {\"FirstName\": \"Mohammed\", \"LastName\": \"Lee\"}]"; 
var dt = JsonConvert.DeserializeObject<DataTable>(data);

请注意,整个json字符串都在[]范围内。即使它是一个只包含数组的json对象,它也不会工作。

如果您想首先反序列化为自定义类型,那么我建议您将完全相同的json反序列化为List<T>而不是DataTable。

class Name 
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

...

var names = JsonConvert.DeserializeObject<List<Name>>(data);

然后有ways to convert the list to a DataTable。话虽如此,一旦你反序列化为自定义列表类型,你还想将它转换为DataTable吗?如果要将DataTable用于控件上的数据绑定,则还有其他绑定源的选项。

答案 2 :(得分:0)

如果仅序列化了一个对象,则将要解析的方括号正确地添加到数据表中。

'ERR'