如何枚举JsonElement数组并转换为List?解决可空类型转换报错
解决方法
你遇到的问题是因为EnumerateArray()返回的是IEnumerable<JsonElement>,调用ToList()后得到的是List<JsonElement>,而C#不允许直接将List<JsonElement>隐式转换为List<JsonElement?>——虽然两者元素类型看似接近,但属于不同的泛型实例,无法直接兼容。
你可以通过以下两种方式解决:
方法1:使用Select显式转换每个元素
在枚举数组时,把每个JsonElement显式转为可空类型,再生成列表:
JsonElement? json = JsonSerializer.Deserialize<JsonElement?>(jsonData); List<JsonElement?> itemsArray = json?.EnumerateArray().Select(e => (JsonElement?)e).ToList();
这里通过(JsonElement?)e将值类型的JsonElement包装为可空的Nullable<JsonElement>,让序列类型匹配目标列表的泛型参数。
方法2:使用Cast统一转换类型
也可以用Cast方法直接将整个序列的元素类型转为可空版本:
JsonElement? json = JsonSerializer.Deserialize<JsonElement?>(jsonData); List<JsonElement?> itemsArray = json?.EnumerateArray().Cast<JsonElement?>().ToList();
Cast<JsonElement?>()会逐个将JsonElement转换为可空类型,最终生成符合要求的List<JsonElement?>。
内容的提问来源于stack exchange,提问作者Ethan Allen
相关产品推荐
相关产品推荐

