如何将字符串转换为对象数组?.NET场景下的实现可行性问询
当然可以实现!
你的需求完全能搞定,不过有个小前提:你提供的字符串不是标准JSON格式——JSON规范要求所有属性名必须用双引号包裹,所以我们需要先把它转换成合法的JSON结构,之后就能用.NET的序列化工具轻松转成目标对象列表了。
步骤1:修复字符串为合法JSON
我们可以用正则表达式来给没有引号的属性名加上双引号,代码示例:
var s = "[{role:staff, storeId: 1234}, {role:admin, storeId: 4321}]"; // 使用正则替换,匹配属性名并添加双引号 var validJson = System.Text.RegularExpressions.Regex.Replace(s, @"(\w+):", @"$1":"); // 替换后validJson会变成:[{"role":"staff", "storeId": 1234}, {"role":"admin", "storeId": 4321}]
步骤2:反序列化为.NET对象列表
接下来就可以用.NET里的序列化库来转换了,这里提供两种常用方案:
方案1:使用Newtonsoft.Json(Json.NET)
这是.NET生态里非常流行的第三方序列化库,需要先通过NuGet安装Newtonsoft.Json包,然后代码如下:
using Newtonsoft.Json; // 你的目标对象定义 public class StaffAccountObj { public string role { get; set; } public string storeId { get; set; } } // 反序列化 var accountList = JsonConvert.DeserializeObject<List<StaffAccountObj>>(validJson);
方案2:使用System.Text.Json(.NET Core 3.0+ 内置)
如果你用的是较新版本的.NET(Core 3.0+或.NET 5+),可以直接用内置的System.Text.Json,无需额外安装包:
using System.Text.Json; // 你的目标对象定义 public class StaffAccountObj { public string role { get; set; } public string storeId { get; set; } } // 配置序列化选项(可选,确保属性名大小写不敏感匹配) var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; // 反序列化 var accountList = JsonSerializer.Deserialize<List<StaffAccountObj>>(validJson, options);
额外说明
原字符串里的storeId值是数字类型(比如1234),但你的目标对象里storeId是string类型——不用担心,上述两个序列化库都会自动完成数字到字符串的转换,不需要额外处理。
内容的提问来源于stack exchange,提问作者test
相关产品推荐
相关产品推荐

