我有一个包含多个 JSON 对象的 JSON 字符串。我想知道如何将 Json 字符串反序列化为 DataSet。
我已经将 JSON 字符串反序列化为 DataTable。它工作正常,但我想知道如何将多个 JSON 对象转换为数据集
下面是示例 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"
}]
}
预期输出为:
姓名、年龄、城市是一张数据表
学位和大学是一个数据表
LoanType & Amount 是一张数据表
请建议如何隐藏这个。
在反序列化为数据集之前,您必须将个人字段转换为数组
using Newtonsoft.Json;
var jObj = JObject.Parse(json);
var propsToRemove = jObj.Properties()
.Where(p => p.Value.Type != JTokenType.Array)
.ToArray();
jObj["PersonalInfo"] = new JArray(new JObject(propsToRemove));
for (var i = 0; i < propsToRemove.Count(); i++)
propsToRemove[i].Remove();
DataSet ds = jObj.ToObject<DataSet>();
测试
var tableNames = string.Join(", ", ds.Tables.OfType<DataTable>()
.Select(dt =>dt.TableName ));
测试结果
EducationalInfo, LoanInfo, PersonalInfo
首先,您要创建一个模型来反序列化您的 JSON 字符串。在您的情况下,您的模型如下所示:
public class Root
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
public EducationalInfo[] EducationalInfo { get; set; }
public LoanInfo[] LoanInfo { get; set; }
}
public class EducationalInfo
{
public string Degree { get; set; }
public string University { get; set; }
}
public class LoanInfo
{
public string LoanType { get; set; }
public int Amount { get; set; }
}
然后您可以通过执行以下操作来反序列化它:
Root root = JsonSerializer.Deserialize<Root>(yourJsonString);
在哪里
root
将是你的对象填充JSON字符串的内容。
要将给定的 JSON 字符串转换为具有多个数据表的数据集,您可以使用 C# 中的 Newtonsoft.Json 库。 使用下面的类反序列化 JSON 字符串。
Rootobject rootobject = JsonConvert.DeserializeObject(jsonString);
public class Rootobject
{
public string Name { get; set; }
public string Age { get; set; }
public string City { get; set; }
public Educationalinfo[] EducationalInfo { get; set; }
public Loaninfo[] LoanInfo { get; set; }
}
public class Educationalinfo
{
public string Degree { get; set; }
public string University { get; set; }
}
public class Loaninfo
{
public string LoanType { get; set; }
public string Amount { get; set; }
}