.NET 自定义 Json 列表或单个项目的转换器

.NET custom Json converter for list or single item

我的目标是使用 System.text.Json 解析来自其余 api 的响应。 响应 returns 一个或多个项目 - 但如果只返回一个项目,则它周围没有括号 [](这使得它难以解析)。

反序列化:

// i need a list here to process data
var response = JsonSeralizer.Deseralize<IList<ExampleResponse>>(content);

示例响应 1:

[
 {
  "Status": "Healthy"
 },
 {
  "Status": "Healthy"
 }
]

示例响应 2:

{
 "Status": "Healthy"
}

如何使用 JsonConverter<T> 编写自定义转换器,它可以解析单个项目或整个列表?

一种选择是创建自定义转换器(继承自 JsonConverter)

虽然在这种情况下我可能会写

var isList = content.StartsWith("[");
var response = isList ? JsonSeralizer.Deseralize<IList<ExampleResponse>>(content)
 : new IList<ExampleResponse> { JsonSeralizer.Deseralize<ExampleResponse>(content) };

您可以检查 content 是否以“{”开头,在这种情况下反序列化为单个项目,然后从单个项目创建新的 List

List<ExampleResponse> response;
if (content.StartsWith("{"){
   response = new List<ExampleResponse>(){
               JsonSerilizer.Deserialize<ExampleResponse>(content)
             };
else
{
    response = JsonSeralizer.Deseralize<IList<ExampleResponse>>(content);
}

如果您无法更改 REST API 的输出以强制它始终 return 一个数组,您可以在解析之前检查字符串,并添加括号。然后解析。

我做了这个例子:https://dotnetfiddle.net/dhZIKq