DotNet core 没有与此对象关联的进程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DotNet core 没有与此对象关联的进程相关的知识,希望对你有一定的参考价值。

参考技术A 开发dotnet core项目时遇到的一个错误:

首先查看windows日志:

Windows日志中看出: Microsoft.NetCore.App and Microsoft.AspNetCore.App 两个包未安装
打开VS NUGET包管理器:

发现已被隐式引用,Microsoft.NetCore.App and Microsoft.AspNetCore.App两个包都需要Microsoft.NETCore.Platforms (>= 2.2.0)
由此检测卡系统的.NETCore.版本是否安装2,2版本

如何将动态对象序列化为 dotnet core 中的 JSON 字符串?

【中文标题】如何将动态对象序列化为 dotnet core 中的 JSON 字符串?【英文标题】:How to serialize a dynamic object to a JSON string in dotnet core? 【发布时间】:2020-02-29 12:14:15 【问题描述】:

我将 JSON 有效负载传递给 API 控制器,其中一个字段是动态的,因为该字段需要作为 JSON 字符串再次传递给另一个 API。 dotnet core 3.1 中间层不应该关心打字,因为负载会改变。

这是传递给 API 控制器的对象:

    public class GitHubAction
    
        [JsonProperty("Title")]
        public string Title  get; set; 

        [JsonProperty("Enabled")]
        [JsonConverter(typeof(BooleanParseStringConverter))]
        public bool Enabled  get; set; 

        [JsonProperty("Action")]
        [JsonConverter(typeof(ExpandoObjectConverter))]
        public dynamic Action  get; set; 
    

这是dynamic 对象在 VSCode 中的图片:

当我使用 JsonConvert.SerializeObject(x.Action); 时,字符串结果没有被正确转换,而是序列化为 ValueKind:"\"ValueKind\":1"

我想要得到的是 JSON 字符串形式的动作对象值,它应该看起来像 ""createRepository":"onboarding":"service":"organization":"foo","repositoryName":"foo-2-service","description":"A test service.""

序列化动态对象有简单的解决方案吗?

【问题讨论】:

这是使用Newtonsoft.Json,还是System.Text.Json ValueKind 来自 System.Text.Json,但 JsonConvert 来自 Newtonsoft。很可能你不能在这里混合 2。尝试使用JsonSerializer.Serialize 而不是JsonConvert.SerializeObject JsonElement 中有一个名为ValueKind 的属性:JsonElement.ValueKind。所以可能你的dynamic Action实际上是JsonElement,你能确认一下吗?显示 JSON 和反序列化代码的 minimal reproducible example 将是理想的。 进入控制器的有效载荷正在使用System.Text.Json 进行序列化,非常确定。我没有在 Startup 中连接 Newtonsoft,但我在代码中的其他地方使用 Newtonsoft 做一些内部工作。是的,它是一个 JsonElement。我在 OP 中拥有的 POCO 对象可能具有误导性。 【参考方案1】:

我遇到了同样的问题,我用这种方式解决了它

using System.Text.Json;

string serializedObject = JsonSerializer.Serialize(x.Action); //Instead of use JsonConvert.SerializeObject(x.Action);

您必须使用System.Text.Json,而不是Newtonsoft.Json

【讨论】:

这似乎无法回答问题,因为 System.Text.Json 目前不处理动态属性。【参考方案2】:

使用 Newtonsoft.Json 代替默认的 System.Text.Json

从 nuget 添加 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包和 在 Startup.cs/ConfigureServices() 中的 services.AddControllers().AddNewtonsoftJson()

【讨论】:

【参考方案3】:

试试这个

var jsonString=s.Action.ToString();

这将为您提供 json 字符串

【讨论】:

【参考方案4】:

如果您想使用 Newtonsoft.Json,请按照以下说明操作:

在使用部分使用这个:

using Newtonsoft.Json;

然后

string serializedObject = JsonConvert.SerializeObject(value);

以及反序列化使用:

var desrializedObject = JsonConvert.DeserializeObject<T>(serializedObject);

【讨论】:

以上是关于DotNet core 没有与此对象关联的进程的主要内容,如果未能解决你的问题,请参考以下文章

四附加到进程调试(.NET Core)

linux dotnet守护进程没有路径

asp.net core-项目开发中问题汇总

dotnet core 创建文件名中没有“CoreFxPipe_”的命名管道

dotnet core webservice中的CPU使用率逐渐增加

net.core 应用程序的远程调试不起作用