gpt4 book ai didi

asp.net - 使用新的 "System.Text.Json"类(Asp.net core 3.0 preview 8)序列化 System.Data.DataTable 的异常

转载 作者:行者123 更新时间:2023-12-04 02:45:04 26 4
gpt4 key购买 nike

我正在 asp.net core 3.0 preview 8 中编写一个 rest api,我试图使用新的“System.Text.Json”类序列化 System.Data.DataTable,但在 Serialize 方法中我收到异常:

The collection type 'System.Data.DataRelationCollection' on 'System.Data.DataTable.ChildRelations' is not supported.



使用 newtonsoft json 序列化程序可以很好地进行相同的序列化。

重现问题的示例代码:
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 collection type 'System.Data.DataRelationCollection' on 'System.Data.DataTable.ChildRelations' is not supported. Source=System.Text.Json StackTrace: at System.Text.Json.JsonClassInfo.GetElementType(Type propertyType, Type parentType, MemberInfo memberInfo, JsonSerializerOptions options) at System.Text.Json.JsonClassInfo.CreateProperty(Type declaredPropertyType, Type runtimePropertyType, Type implementedPropertyType, PropertyInfo propertyInfo, Type parentClassType, JsonSerializerOptions options) at System.Text.Json.JsonClassInfo.AddProperty(Type propertyType, PropertyInfo propertyInfo, Type classType, JsonSerializerOptions options) at System.Text.Json.JsonClassInfo..ctor(Type type, JsonSerializerOptions options) at System.Text.Json.JsonSerializerOptions.GetOrAddClass(Type classType) at System.Text.Json.WriteStackFrame.Initialize(Type type, JsonSerializerOptions options) at System.Text.Json.JsonSerializer.WriteCore(Utf8JsonWriter writer, PooledByteBufferWriter output, Object value, Type type, JsonSerializerOptions options) at System.Text.Json.JsonSerializer.WriteCore(PooledByteBufferWriter output, Object value, Type type, JsonSerializerOptions options) at System.Text.Json.JsonSerializer.WriteCoreString(Object value, Type type, JsonSerializerOptions options) at System.Text.Json.JsonSerializer.Serialize[TValue](TValue value, JsonSerializerOptions options) at ErrorJsonMIcrosoftDataTable.Controllers.WeatherForecastController.Get() in G:\testnet\ErrorJsonMIcrosoftDataTable\ErrorJsonMIcrosoftDataTable\Controllers\WeatherForecastController.cs:line 31 at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters) at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<g__Logged|12_1>d.MoveNext()



你能帮忙吗?

谢谢你。

最佳答案

简短回答: 至少目前无法使用 System.Text.Json 完成。

如果您想使用今天可用的 ASP.NET Core 3.0 序列化 System.Data.DataTable,请继续阅读我的文章的其余部分以获取解决方法。

解决方法:
首先,您应该检查 MS 的“Migrate from ASP.NET Core 2.2 to 3.0”文档的“Json.NET support”。

解决方法有2个步骤:

  • 添加对“Microsoft.AspNetCore.Mvc.NewtonsoftJson”的包引用
  • 在“services.AddMvc()”之后添加这一行“.AddNewtonsoftJson()”
    以下是更改前后的 Startup.cs 示例:

  • 前:
    services
    .AddMvc(options =>
    {
    options.EnableEndpointRouting = false;
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
    .AddJsonOptions(options =>
    {
    options.JsonSerializerOptions.IgnoreNullValues = true;
    options.JsonSerializerOptions.WriteIndented = true;
    });

    后:
    services
    .AddMvc(options =>
    {
    options.EnableEndpointRouting = false;
    })
    .AddNewtonsoftJson()
    .SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
    .AddJsonOptions(options =>
    {
    options.JsonSerializerOptions.IgnoreNullValues = true;
    options.JsonSerializerOptions.WriteIndented = true;
    });

    关于asp.net - 使用新的 "System.Text.Json"类(Asp.net core 3.0 preview 8)序列化 System.Data.DataTable 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57548928/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com