JSON 转换为数据集

问题描述 投票:0回答:3

我有一个包含多个 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 是一张数据表

请建议如何隐藏这个。

c# json datatable dataset
3个回答
1
投票

在反序列化为数据集之前,您必须将个人字段转换为数组

     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

0
投票

首先,您要创建一个模型来反序列化您的 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字符串的内容。


0
投票

要将给定的 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; }
    }
© www.soinside.com 2019 - 2024. All rights reserved.