c# - 无法将“AttachmentDetailsDto”类型的对象转换为“System.String”类型
问题描述
有方法
public async Task<IEnumerable<IGrouping<string, AttachmentDetailsDto>>> GetAttachmentsAsync(long assetInfoId)
在里面我做...
var results = new List<AttachmentDetailsDto>();
var attachmentEntities = await _attachmentRepository.GetAsync(x => x.ParentAssetInfoId == assetInfoId && !x.IsDeleted).ConfigureAwait(false);
foreach (var attachmentEntity in attachmentEntities)
{
var attachmentTypeEntity = await _attachmentTypeRepository.GetByIdAsync(attachmentEntity.MetattachTypeId).ConfigureAwait(false);
var metattachDetail = new AttachmentDetailsDto
{
Id = attachmentEntity.Id,
TypeId = attachmentEntity.MetattachTypeId,
Type = attachmentTypeEntity.Name,
Name = attachmentEntity.Name,
Notes = attachmentEntity.Notes,
};
attachmentType = attachmentEntity.MetaType;
var assetInfoEntity = default(AssetInfo);
switch (attachmentType)
{
case "DigiDoc":
var digiDocEntity = await _digiDocRepository.GetByIdAsync(attachmentEntity.TypeId).ConfigureAwait(false);
metattachDetail.DigiDoc = new DigiDocDto
{
Id = digiDocEntity.Id,
ContentType = digiDocEntity.ContentType,
Url = digiDocEntity.Url
};
break;
... other cases ...
}
results.Add(metattachDetail);
}
return results.GroupBy(x => x.Type);
这里没有错误,但在我的控制器中......
public async Task<ActionResult> GetAttachmentsAsync(long assetInfoId)
{
var result = await _attachmentManager.GetAttachmentsAsync(assetInfoId).ConfigureAwait(false);
return Ok(result);
}
return Ok(result);
“ ”行抛出错误
...我不明白,.Net Framework 中的相同代码完美运行,现在在 .Net Core 3.1 中出现错误...
错误:
无法将“AttachmentDetailsDto”类型的对象转换为“System.String”类型。
堆栈跟踪:
在 System.Text.Json.JsonPropertyInfoNotNullable'4.OnWriteEnumerable(WriteStackFrame& current, Utf8JsonWriter writer) 在 System.Text.Json.JsonPropertyInfo.WriteEnumerable(WriteStack& state, Utf8JsonWriter writer) 在 System.Text.Json.JsonSerializer.HandleEnumerable(JsonClassInfo elementClassInfo, JsonSerializerOptions options, Utf8JsonWriter writer, WriteStack& state) at System.Text.Json.JsonSerializer.Write(Utf8JsonWriter writer, Int32 originalWriterDepth, Int32 flushThreshold, JsonSerializerOptions options, WriteStack& state) at System.Text.Json.JsonSerializer.d__50.MoveNext() System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft。AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.d__5.MoveNext() 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.d__5.MoveNext() 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo。 Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<g__Logged|21_0>d.MoveNext () 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.AspNetCore.Mvc.Infrastructure .ResourceInvoker。<g__Awaited|29_0>d`2.MoveNext() 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context) 在 Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker .ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted) 在 Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters() 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime .CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在 Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<g__Awaited|24_0>d.MoveNext() 在 System.Runtime。 ExceptionServices.ExceptionDispatchInfo。Throw() at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc .Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync() 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft .AspNetCore.Mvc.Infrastructure.ResourceInvoker.<g__Logged|17_1>d.MoveNext() 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime。编译器服务。TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.AspNetCore.Routing.EndpointMiddleware.<g__AwaitRequestTask|6_0>d.MoveNext() at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在 Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.d__5.MoveNext() 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter .ThrowForNonSuccess(任务任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在 Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.d__6.MoveNext() 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo。Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.d__5.MoveNext() 在 System.Runtime。 ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.d__4.MoveNext() at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 HomeaZZon.Api.Middlewares.ExceptionMiddleware.d__3。MoveNext() 在 C:\repo\homeazzon\api\api-.core-monolothic\HomeaZZon.Api\Middlewares\ExceptionMiddleware.cs:line 28
...
启动.cs
...
services.AddMvc().AddJsonOptions(o =>
{
o.JsonSerializerOptions.IgnoreNullValues = true;
o.JsonSerializerOptions.PropertyNamingPolicy = null;
});
解决方案
正如其他人所提到的,很难真正确定您的错误,但如果您只是想要在序列化方面与 .NET Framework 中的功能相同,那么您就是这样做的。
安装以下 nuget 包:
Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
然后在您的服务方法中,您将拥有类似“AddMVC”的内容。像这样修改:
services.AddMvc().AddNewtonsoftJson();
更多信息:https ://dotnetcoretutorials.com/2019/12/19/using-newtonsoft-json-in-net-core-3-projects/
.NET Core 项目 3+ 使用新的 JSON 序列化程序,老实说还不错,但到处都有一些问题。更高版本中的性能优势是一个很大的好处,但如果您只需要与之前完全一样的东西,那么您需要使用 JSON.NET(使用上述说明),您将回到过去!
推荐阅读
- c++ - 指向抽象模板单例类的指针的 C++ 向量?
- python - Buildozer 和 cython 冲突
- json - JSON 数组存储索引
- typescript - 后一个元素的类型取决于前一个元素的值的元组
- firefox - 为什么我的嵌入字体不能仅在 Firefox 中运行?
- c++ - 解析宏中定义的成员函数中的当前类型
- azure - 单个存储库的 Azure DevOps 权限
- sql - 如何在 SQL 中按开始和结束日期动态过滤记录?
- docker - 通过 ngix 和自定义端口在 https 上运行 owncloud
- xamarin.forms - Xamarin.UITest:如何确定 Xamarin.Forms.ListView 是否正在刷新?