问题描述
我想知道如何将 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);
发生此异常:
还有Newtonsoft:
List<string> myList = JsonConvert.DeserializeObject<List<string>>(json);
在dotnetcore 3.1和Newtonsoft中无法使用内置反序列化器对this json(由Google翻译api响应)进行反序列化之后,我决定将其手动转换为类和字符串,但是我的代码无法正常工作
结果应该是这样的:
列表:
项目1:
[
"a",1
]
项目2:
[
"d",2
]
-
是否可以将在链接中提到的json反序列化为类? (Visual Studio特殊粘贴无效)
-
为什么我不能将json数组的json数组转换为字符串列表?
-
此问题与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]"