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