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

问题描述

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

这意味着应该将内部数组转换为字符串

json是:

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

使用内置c#json解串器的c#代码为:

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

发生此异常:

enter image description here

还有Newtonsoft:

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

enter image description here

在dotnetcore 3.1和Newtonsoft中无法使用内置反序列化器对this json(由Google翻译api响应)进行反序列化之后,我决定将其手动转换为类和字符串,但是我的代码无法正常工作

结果应该是这样的:

列表:

项目1:

[
        "a",1
]

项目2:

[
        "d",2
]
  1. 是否可以将在链接中提到的json反序列化为类? (Visual Studio特殊粘贴无效)

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

  3. 此问题与this issue相关吗?

解决方法

您不仅在集合中包含字符串,而且还具有嵌套数组,所以List<string>不代表您的JSON结构。如果只想获取字符串,则可以执行以下操作(在固定d值之后,此操作与Newtonsoft相同):

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

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

或者您可以使用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",2]"

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...