首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DeserializeObject Framework4.6.1控制台应用程序到Core2.0控制台应用程序后的Newtonsoft DeserializeObject错误

从DeserializeObject Framework4.6.1控制台应用程序到Core2.0控制台应用程序后的Newtonsoft DeserializeObject错误
EN

Stack Overflow用户
提问于 2017-12-27 00:20:50
回答 1查看 2K关注 0票数 2

使用.Net框架4.6.1可以很好地工作:

代码语言:javascript
复制
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;
}

这也适用于:

代码语言:javascript
复制
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就会显示我上面发布的错误。

EN

回答 1

Stack Overflow用户

发布于 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),您可以自己检查:

代码语言:javascript
复制
var dt = new DataTable();
dt.Columns.Add("Column1", typeof(string));
dt.Rows.Add("value");
var json = JsonConvert.SerializeObject(dt);

你会得到这样的东西:

代码语言:javascript
复制
{
  "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),您将得到:

代码语言:javascript
复制
[
  {
    "Column1": "value"
  }
]

库中有一个关于这个一四零九的问题

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47985020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档