我正在用asp.net核心3.0预览8编写rest,我试图使用新的"System.Text.Json“类序列化System.Data.DataTable,但是在序列化方法中我收到了异常:
不支持'System.Data.DataTable.ChildRelations‘上的集合类型’System.Data.DataTable.ChildRelations‘。
使用newtonsoft序列化程序,同样的序列化工作得很好。
再现问题的示例代码:
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[]参数)
你能帮忙吗?
谢谢。
发布于 2019-10-04 09:16:19
简短的回答:--它不能用System.Text.Json完成,至少目前是这样。
如果您想使用System.Data.DataTable Core3.0以今天可用的内容序列化ASP.NET,请继续阅读我的文章的其余部分以找到解决办法。
解决方案:首先,您应该检查从Core2.2迁移到3.0的文档的"Json.NET支持“。
该解决方案有两个步骤:
在此之前:
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;
});https://stackoverflow.com/questions/57548928
复制相似问题