.NET Core 3.0 WebApi (JsonSerialize) 不序列化嵌套对象/所有对象信息

Abd*_*aan 5 c# elasticsearch .net-core asp.net-core-webapi

我有一个对象列表 as IEnumerable<IHit<Header>>,但 .NET Core 3.0 没有发出所有信息

这是当我返回列表的单个对象 IHit 时 obj.ElementAt(0)

{"explanation":null,"fields":null,"highlight":{},"id":"123","index":"ky","innerHits":{},"matchedQueries":[], "nested":null, "primaryTerm":null, "routing":null, "score":10.98915, "sequenceNumber":null, "sorts":[],"source":{"timeStamp":"2019-05 -16T06:16:07Z", "result":"PASS","testTimeStart":"20190516141559","testTimeEnd":"20190516141607","barcode":"XXRX8762"},"type":"_doc","版本":0}

但是当我返回列表本身时:

[{"explanation":null,"fields":null,"highlight":{},"innerHits":{},"matchedQueries":[],"nested":null,"score":10.98915,"sorts" :[]}]

也当我尝试明确调用 JsonSerializer

string s = JsonSerializer.Serialize(result, typeof(IEnumerable<IHit<Header>>), obj);
Run Code Online (Sandbox Code Playgroud)

总结:

  1. 的WebAPI工作正常,返回如果正确序列化对象劲儿对象:

    public IHit<Header> Get(string id)

但是当一个列表时,则不是。

public IEnumerable<IHit<Header>> GetAll()
Run Code Online (Sandbox Code Playgroud)

我试过了IEnumerable, IList, List,结果都是一样的!

  1. JsonSerializer既不处理单个对象也不处理列表

Abd*_*aan 17

我仍然不知道由于发出单个对象而不是列表的情况而面临的奇怪行为。

但这里如何根据@poke 的回答和@NeilMacMullen 的评论解决问题

  1. 添加包 Microsoft.AspNetCore.Mvc.NewtonsoftJson
  2. 在 Startup.cs 中,添加

    services.AddControllers().AddNewtonsoftJson();

  • 我个人认为 Microsoft 将其不成熟的序列化器作为 .NET Core 3.0 项目的默认解决方案推出是荒谬的。我的意思是,它的速度确实是 Newtonsoft 的两倍,但它的代价是只有不到一半的功能被毁掉。 (2认同)
  • 截至今天,2022 年 6 月,我正在使用 dotnet 6,这不起作用..非常沮丧 (2认同)

小智 6

在.Net 6中添加属性[JsonIninclude]以使其序列化列表

例如

   [JsonInclude]
   public List<StaffEarningDetail> EarningDetails;
Run Code Online (Sandbox Code Playgroud)