将数组的json数组反序列化为C#中的字符串列表

Deserialize json array of array to List of string in C#

我想知道如何将 json 数组 json 数组 转换(反序列化)为 字符串列表.

这意味着内部数组应该被转换成字符串

json 是:

[
      [
         "a",
         "b",
         "c",
         null,
         1
      ],
      [
         "d",
         "e",
         null,
         2
      ]
]

使用内置 C# json 解串器的 C# 代码是:

List<string> myList = System.Text.Json.JsonSerializer.Deserialize<List<string>>(json);

发生此异常:

和牛顿软件:

List<string> myList = JsonConvert.DeserializeObject<List<string>>(json);

在无法使用 dotnetcore 3.1 和 Newtonsoft 中的内置反序列化器反序列化 this json(即 google 翻译 api 响应)后,我决定手动将其转换为类 和字符串,但我的代码不起作用。

结果应该是这样的:

列表:

项目 1:

[
        "a",
        "b",
        "c",
        null,
        1
]

项目 2:

[
        "d",
        "e",
        null,
        2
]
  1. 有没有办法将我在link中提到的json反序列化为类? (Visual Studio 特殊粘贴无效)

  2. 为什么我无法将 json 数组的 json 数组转换为字符串列表?

  3. 这个问题与this issue有关吗?

您的集合中不仅有字符串,还有嵌套数组,因此 List<string> 不代表您的 JSON 结构。如果你只想得到字符串,你可以做这样的事情(这个是 Newtonsoft,在修复 d 值之后):

var strings = JsonConvert.DeserializeObject<List<List<object>>>(json)
    .Select(arr => arr.OfType<string>().ToList())
    .ToList();

或者如果要将所有值转换为字符串,则在 Select 中使用 arr => arr.Select(a => a?.ToString()

或者您可以使用 Newtonsoft 转换为 List<JArray> 并在其上调用 ToString:

List<string> strings = JsonConvert.DeserializeObject<List<JArray>>(json)
    .Select(jarr => jarr.ToString(Newtonsoft.Json.Formatting.None)) 
    .ToList();
Console.WriteLine(string.Join(", ", strings)); // prints "["a","b","c",null,1], ["d","e",null,2]"