使用.Net框架4.6.1可以很好地工作:
private DataTable GetRESTData(string pUri)
{
var json = ReadFromUri(pUri);
var obj = JsonConvert.DeserializeObject(json);
string StrContent = ((Newtonsoft.Json.Linq.JObject)obj).Last.ToString();
StrContent = StrContent.Substring(9, StrContent.Length - 9);
DataTable dt = JsonConvert.DeserializeObject<DataTable>(StrContent);
return dt;
}这也适用于:
DataTable dt = (DataTable)JsonConvert.DeserializeObject(StrContent.Substring(9, StrContent.Length - 9), (typeof(DataTable)));但是我找不到任何在核心2.0控制台应用程序上工作的东西,我总是得到:
Newtonsoft.Json.JsonSerializationException:不能将当前的JSON数组(例如,1,2,3)反序列化为'System.Data.DataTable‘类型,因为该类型需要一个JSON对象(例如{“名称”:“值”})才能正确反序列化。 要纠正这个错误,要么改变.
如果我将字符串StrContent.Substring(9, StrContent.Length - 9)看作JSON或字符串,那么它的格式是完美的。
我从安装了NewtonSoft。
编辑:我正在使用2017。如果我在Framework4.6.1的项目上运行这个程序,它就能很好地工作,那么带有Core2.0的project就会显示我上面发布的错误。
发布于 2017-12-27 02:45:13
Newtonsoft.Json库当前的稳定版本不支持像完整的.NET版本那样序列化数据集/DataTables。
这是因为库(10.0.3版)以NETStandard 1.3为目标,但DataSet/DataTable支持是在NetCore2.0上添加的。
当前的beta版本以NetStandard 2.0为目标,支持序列化数据集,因此如果您更新引用以使用最新的beta包Newtonsoft.Json/11.0.1-beta1或等到稳定版本发布后,您将能够序列化/反序列化。
如果您将以下DataTable序列化为.NET核心上的JSON (Newtonsoft.JSON/10.0.3),您可以自己检查:
var dt = new DataTable();
dt.Columns.Add("Column1", typeof(string));
dt.Rows.Add("value");
var json = JsonConvert.SerializeObject(dt);你会得到这样的东西:
{
"DataTable.RemotingVersion": {
"Major": 2,
"Minor": 0,
"Build": -1,
"Revision": -1,
"MajorRevision": -1,
"MinorRevision": -1
},
"XmlSchema": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<xs:schema xmlns=\"\" ... </diffgr:diffgram>"
}但是,如果您针对当前的beta版本(11.0.1-beta1),您将得到:
[
{
"Column1": "value"
}
]库中有一个关于这个一四零九的问题
https://stackoverflow.com/questions/47985020
复制相似问题