system.text.json序列化的json数据中不是原始的json结构,如何序列化成原始结构呢?


{
    "$id": "1",
    "return_code": "SUCCESS",
    "message": "",
    "resdata": {
        "$id": "2",
        "$values": [
            {
                "$id": "3",
                "menuOid": "be066af2-0de9-ea11-a76b-00155de5aa1f",
                "name": "点菜谱1",
                "effect": true
            }
        ]
    }
}

如上面的数据,多出来了一层结构,"$id" 和 "$values" ,如何去除这层结构恢复原始的json对象结果呢?
忘记说了,是asp.net core 的项目

您好,
System.Text.Json正常序列化的话是不会有$id,$value的,你肯定是设置了ReferenceHandler = ReferenceHandler.Preserve来处理循环引用了,这是设计使然并且不建议修改,可能会导致出错反而变得更复杂,你可以看下微软的官方文档:

  1. 如何使用 System.Text.Json 保留引用 | Microsoft Docs 了解在 .NET 中序列化为 JSON 和从 JSON 进行反序列化时如何保留引用并处理循环引用。 https://docs.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json-preserve-references?pivots=dotnet-5-0
  2. ReferenceHandler.Preserve 属性 (System.Text.Json.Serialization) | Microsoft Docs 将 JSON 对象和数组反序列化为引用类型时,元数据属性将有效,并在序列化引用类型时写入。Metadata properties will be honored when deserializing JSON objects and arrays into reference types and written when serializing reference types. 这对于从包含循环或重复引用的对象创建往返 JSON 是必需的。This is necessary to create round-trippable JSON from objects that contain cycles or duplicate references. https://docs.microsoft.com/zh-cn/dotnet/api/system.text.json.serialization.referencehandler.preserve?view=net-5.0

比较简单的方法是你可以沿用Newtonsoft.Json,它在处理循环引用的时候没有更改json的格式,具体如何沿用你可以参考下面的官方文档:

如果你要获取json中的值,你可以这样做:

public IActionResult Index()
{
    JsonSerializerOptions options = new()
    {
        ReferenceHandler = ReferenceHandler.Preserve,
        WriteIndented = true
    };
    //将json反序列化成对应的model...
    var data= JsonSerializer.Deserialize<List<YourModel>>(YourJsonString,options);
    return View(data);
}

Index.cshtml:

将后台的model传递到前台:

@model List<YourModel>
@foreach(var item in Model)
{
     @item.propertyName
}

换种序列化方式吧,本来及时原始数据是什么,序列化后的数据就是什么,少或多的都是不对的,如有帮助望采纳,谢谢

ASP.NET中JSON的序列化和反序列化 - Asharp - 博客园 JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式。在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 https://www.cnblogs.com/zhaozhan/archive/2011/01/09/1931340.html