C#中有没有等效于Python ast.literal_eval的函数?
C# 字符串编码数组/嵌套结构解析方案
内置方案(.NET Core 3.0+ / .NET 5+ 可用,无需第三方依赖)
你要的功能完全可以用.NET 自带的System.Text.Json库实现,和Python的ast.literal_eval对这类标准JSON结构的解析效果完全一致,支持同类型数组、混合类型嵌套结构的解析。
示例1:解析浮点数组
using System.Text.Json; string input = "[1.2,24.4,35.5,4.5]"; float[] result = JsonSerializer.Deserialize<float[]>(input); // 输出结果:float[] { 1.2F, 24.4F, 35.5F, 4.5F }
示例2:解析混合嵌套结构
因为C#是强类型语言,混合类型的结构你可以解析为通用的JsonElement类型,按需读取对应位置的值即可:
using System.Text.Json; string input = "[\"foo\",123,[1,2,3]]"; JsonElement result = JsonSerializer.Deserialize<JsonElement>(input); // 按需取值 string strVal = result[0].GetString(); // 得到 "foo" int intVal = result[1].GetInt32(); // 得到 123 int[] arrVal = result[2].Deserialize<int[]>(); // 得到 int[] { 1, 2, 3 }
.NET Framework 兼容方案
如果使用的是老版本.NET Framework,可通过Newtonsoft.Json(Json.NET)实现相同效果:
using Newtonsoft.Json; // 解析浮点数组 string floatInput = "[1.2,24.4,35.5,4.5]"; float[] floatArr = JsonConvert.DeserializeObject<float[]>(floatInput); // 解析混合嵌套结构 string nestedInput = "[\"foo\",123,[1,2,3]]"; dynamic nestedResult = JsonConvert.DeserializeObject(nestedInput); string strVal = nestedResult[0].Value; int intVal = nestedResult[1].Value; int[] arrVal = nestedResult[2].ToObject<int[]>();
注意:你给出的示例字符串本身就是标准JSON数组格式,上述两个库都可以直接解析,无需额外做格式处理。
内容的提问来源于stack exchange,提问作者Sami Wood
相关产品推荐
相关产品推荐

