如何将含多JSON对象的字符串反序列化为DataSet?
将嵌套JSON反序列化为DataSet的方法
针对你提供的JSON结构,要生成包含3个DataTable的DataSet,可通过以下两种常用方法实现(基于.NET生态下的Newtonsoft.Json库,需先安装对应NuGet包):
方法一:手动构建DataSet(灵活自定义表结构)
先解析JSON对象,再逐个创建DataTable并添加到DataSet,适合需要自定义表名、字段类型的场景:
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Data; // 你的目标JSON字符串 string json = @"{""Name"": ""Jamal"",""Age"": ""42"",""City"": ""Mumbai"",""EducationalInfo"": [{""Degree"": ""BE"",""University"": ""Cristian Universiy""}, {""Degree"": ""ME"",""University"": ""Texas University""}],""LoanInfo"": [{""LoanType"": ""Car Loan"",""Amount"": ""1000000""}, {""LoanType"": ""Personal"",""Amount"": ""200000""}]}"; // 1. 解析JSON为JObject JObject jsonObj = JObject.Parse(json); // 2. 初始化DataSet DataSet targetDataSet = new DataSet(); // 3. 创建个人信息表 DataTable personalTable = new DataTable("PersonalInfo"); personalTable.Columns.Add("Name", typeof(string)); personalTable.Columns.Add("Age", typeof(string)); personalTable.Columns.Add("City", typeof(string)); // 填充行数据 personalTable.Rows.Add(jsonObj["Name"].ToString(), jsonObj["Age"].ToString(), jsonObj["City"].ToString()); targetDataSet.Tables.Add(personalTable); // 4. 转换教育信息数组为DataTable并添加 DataTable eduTable = jsonObj["EducationalInfo"].ToObject<DataTable>(); eduTable.TableName = "EducationalInfo"; targetDataSet.Tables.Add(eduTable); // 5. 转换贷款信息数组为DataTable并添加 DataTable loanTable = jsonObj["LoanInfo"].ToObject<DataTable>(); loanTable.TableName = "LoanInfo"; targetDataSet.Tables.Add(loanTable);
方法二:直接反序列化(简洁高效)
DataSet默认会将JSON中顶级的数组对象识别为DataTable,因此只需将原JSON的顶级字段包装成数组,调整结构后即可直接反序列化:
调整后的JSON结构
{ "PersonalInfo": [{"Name": "Jamal", "Age": "42", "City": "Mumbai"}], "EducationalInfo": [{"Degree": "BE", "University": "Cristian Universiy"}, {"Degree": "ME", "University": "Texas University"}], "LoanInfo": [{"LoanType": "Car Loan", "Amount": "1000000"}, {"LoanType": "Personal", "Amount": "200000"}] }
反序列化代码
using Newtonsoft.Json; using System.Data; // 调整后的JSON字符串 string adjustedJson = @"{""PersonalInfo"": [{""Name"": ""Jamal"",""Age"": ""42"",""City"": ""Mumbai""}],""EducationalInfo"": [{""Degree"": ""BE"",""University"": ""Cristian Universiy""}, {""Degree"": ""ME"",""University"": ""Texas University""}],""LoanInfo"": [{""LoanType"": ""Car Loan"",""Amount"": ""1000000""}, {""LoanType"": ""Personal"",""Amount"": ""200000""}]}"; // 直接反序列化为DataSet DataSet targetDataSet = JsonConvert.DeserializeObject<DataSet>(adjustedJson);
注意事项
- 需确保项目已安装
Newtonsoft.JsonNuGet包,这是.NET处理JSON的主流工具。 - 方法一适合需要精细控制表结构(如修改字段类型、自定义表名)的场景;方法二更适合快速转换,无需额外自定义逻辑。
内容的提问来源于stack exchange,提问作者Ezhumalai
相关产品推荐
相关产品推荐

