我正在使用JsonConvert.SerializeObject方法序列化这个对象:

var objx = new JsonObject
{
    ["prob1"] = new JsonObject
    {
        ["phone"] = "1019577756",
        ["name"] = "Jan",
        ["type"] = "Agent"
    }
};

我正在使用这个代码:

using System.Text.Json.Nodes;

var jsonString = JsonConvert.SerializeObject(objx, Formatting.None,
      new JsonSerializerSettings()
      {
          ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
      });

但我得到了这个结果:

{
    "prob1":
    {
         "phone":
         {
               "_value": "1019577756",
               "Value": "1019577756",
               "Options": null
         },
         "name": 
         {
               "_value": "Jan",
               "Value": "Jan",
               "Options": null
         },
         "type"
         {
               "_value": "Agent",
               "Value": "Agent",
               "Options": null
         }
   }
}

但我需要这样的:

{
   "prob1": 
   {
       "phone": "1019577756",
       "name": "Jan",
       "type": "Agent"
   }
}

我可以用JsonSerializerSettings,但我不知道我到底需要做什么

推荐答案

您正在混合JSON序列化库.JsonObject来自System.Text.Json库,而您正在使用Netwonsoft.Json进行序列化.

System.Text.Json年全面实施:

using System.Text.Json;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;

var jsonString = JsonSerializer.Serialize(objx, 
    new JsonSerializerOptions 
    { 
        WriteIndented = false, 
        ReferenceHandler = ReferenceHandler.IgnoreCycles 
    });

参考编号:Migrate from Newtonsoft.Json to System.Text.Json

或全面实施Newtonsoft.Json:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

var objx = new JObject
{
    ["prob1"] = new JObject
    {
        ["phone"] = "1019577756",
        ["name"] = "Jan",
        ["type"] = "Agent"
    }
};

var jsonString = JsonConvert.SerializeObject(objx, Formatting.None,
    new JsonSerializerSettings()
    {
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
    });

Csharp相关问答推荐

C#中的包版本控制

错误401未授权ASP.NET Core.使用JWT创建身份验证/授权

在LINQ Where子句中使用新的DateTime

如何在Parall.ForEachAsync中使用CancerationTokenSource

JsonSerializer.Deserialize<;TValue>;(String,JsonSerializerOptions)何时返回空?

最新的Mediatr和具有同步方法的处理程序Handle:并非所有代码路径都返回值"

获取具有AutoFaces的所有IOptions对象的集合

在此系统上已禁用获取正在运行的脚本.&在ASP.NET Core Web API中

在.NET MAUI.NET 8中如何防止按钮点击时出现灰色反馈

如何捕获对ASP.NET核心应用程序的所有请求并将其发送到一个页面

在.NET 7.0 API控制器项目中通过继承和显式调用基类使用依赖项注入

使用ExtractIconEx(或其他方式)提取最大的可用图标

什么类型的对象存储在大对象堆(LOH)中

如何将FindAll()与Nuget包Interop.UIAutomationClient一起使用

如何在.NET AOT中为所有枚举启用JsonStringEnumConverter

Azure Functions v4中的Serilog控制台主题

使用动态键从请求体反序列化JSON

如何对特定异常使用Polly重试机制?

SqlException:无法打开数据库.升级到Dotnet 8后-数据库兼容性版本-非EFCore兼容性级别

将带有嵌套If-Else的Foreach循环转换为Linq表达式