首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用新的“System.Data.DataTable”类序列化System.Text.Json的异常(Asp.net核心3.0预览8)

使用新的“System.Data.DataTable”类序列化System.Text.Json的异常(Asp.net核心3.0预览8)
EN

Stack Overflow用户
提问于 2019-08-18 22:56:21
回答 1查看 4.2K关注 0票数 4

我正在用asp.net核心3.0预览8编写rest,我试图使用新的"System.Text.Json“类序列化System.Data.DataTable,但是在序列化方法中我收到了异常:

不支持'System.Data.DataTable.ChildRelations‘上的集合类型’System.Data.DataTable.ChildRelations‘。

使用newtonsoft序列化程序,同样的序列化工作得很好。

再现问题的示例代码:

代码语言:javascript
复制
var dt = new System.Data.DataTable("test");
dt.Columns.Add("Column1");
var ser=System.Text.Json.JsonSerializer.Serialize(dt);

详细例外:

不支持System.NotSupportedException HResult=0x80131515 Message=The集合类型在“System.Data.DataTable.ChildRelations”上的“System.Data.DataRelationCollection”类型。在System.Text.Json.JsonClassInfo.GetElementType(Type propertyType,在System.Text.Json.JsonClassInfo.CreateProperty(Type declaredPropertyType,Type parentType,MemberInfo memberInfo,JsonSerializerOptions options),在System.Text.Json.JsonClassInfo.AddProperty(Type propertyInfo,runtimePropertyType类型,Type implementedPropertyType,PropertyInfo propertyInfo,Type parentClassType,JsonSerializerOptions options),implementedPropertyType,,选项)在(类型,类型,( System.Text.Json.JsonSerializerOptions.GetOrAddClass(Type classType)在System.Text.Json.WriteStackFrame.Initialize(Type类型下( JsonSerializerOptions options) ),在System.Text.Json.JsonSerializer.WriteCore(Utf8JsonWriter编写器( JsonSerializerOptions options),PooledByteBufferWriter输出( Object值,Object值,type类型,JsonSerializerOptions选项)(在System.Text.Json.JsonSerializer.WriteCore(PooledByteBufferWriter输出中),Object值,type类型,JsonSerializerOptions选项(在System.Text.Json.JsonSerializer.WriteCoreString(Object值,type类型,JsonSerializerOptions选项),( System.Text.Json.JsonSerializer.SerializeTValue at ErrorJsonMIcrosoftDataTable.Controllers.WeatherForecastController.Get() in G:\testnet\ErrorJsonMIcrosoftDataTable\ErrorJsonMIcrosoftDataTable\Controllers\WeatherForecastController.cs:line 31 at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target,Object[]参数) at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper,ObjectMethodExecutor executor,Object控制器,Object[]参数)

你能帮忙吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-04 09:16:19

简短的回答:--它不能用System.Text.Json完成,至少目前是这样。

如果您想使用System.Data.DataTable Core3.0以今天可用的内容序列化ASP.NET,请继续阅读我的文章的其余部分以找到解决办法。

解决方案:首先,您应该检查从Core2.2迁移到3.0的文档的"Json.NET支持“。

该解决方案有两个步骤:

  1. 添加对"Microsoft.AspNetCore.Mvc.NewtonsoftJson“的包引用
  2. 在".AddNewtonsoftJson()“后面添加一行"services.AddMvc()”,这里是更改前后Startup.cs的一个示例:

在此之前:

代码语言:javascript
复制
services
    .AddMvc(options =>
    {
        options.EnableEndpointRouting = false;
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
        options.JsonSerializerOptions.WriteIndented = true;
    });

之后:

代码语言:javascript
复制
services
    .AddMvc(options =>
    {
        options.EnableEndpointRouting = false;
    })
    .AddNewtonsoftJson()
    .SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
        options.JsonSerializerOptions.WriteIndented = true;
    });
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57548928

复制
相关文章

相似问题

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