转换数据集与多个数据表到JSON [英] Convert DataSet with multiple Datatables to Json

查看:205
本文介绍了转换数据集与多个数据表到JSON的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想转换具有在其中多个数据表的数据集。

I want to convert a dataset which has multiple data-tables within it.

以下是本例中,

该数据集X有两个数据表A和b

The dataset X has two data tables A and B

我想要的结果如下,

{
    "type":"A",
    "value":"100",
    "details":[
        {"name":"John", "age":"45", "gender":"M"},
        {"name":"Sebastin", "age":"34", "gender":"M"},
        {"name":"Marc", "age":"23", "gender":"M"},
        {"name":"Natalia", "age":"34", "gender":"F"}
        ]
}

目前我使用Newtonsoft.Json 。是否有可能与Newtonsoft.Json?
如果没有,是否可以与任何其他.NET的Json工具?

Currently I am using Newtonsoft.Json. Is it possible with Newtonsoft.Json? If not, is it possible with any other .net Json tools?

推荐答案

您可以得到你想要的JSON通过实现自定义 JsonConverter 像这样的数据集:

You can get the JSON you want by implementing a custom JsonConverter for the DataSet like this:

class CustomDataSetConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(DataSet));
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        DataSet x = (DataSet)value;
        JObject jObject = new JObject();
        DataTable a = x.Tables["A"];
        foreach (DataColumn col in a.Columns)
        {
            jObject.Add(col.Caption.ToLower(), a.Rows[0][col].ToString());
        }
        JArray jArray = new JArray();
        DataTable b = x.Tables["B"];
        foreach (DataRow row in b.Rows)
        {
            JObject jo = new JObject();
            foreach (DataColumn col in b.Columns)
            {
                jo.Add(col.Caption.ToLower(), row[col].ToString());
            }
            jArray.Add(jo);
        }
        jObject.Add("details", jArray);
        jObject.WriteTo(writer);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

下面是一个演示:

class Program
{
    static void Main(string[] args)
    {
        DataSet x = new DataSet();
        DataTable a = x.Tables.Add("A");
        a.Columns.Add("Type");
        a.Columns.Add("Value");
        a.Rows.Add("A", "100");
        DataTable b = x.Tables.Add("B");
        b.Columns.Add("Name");
        b.Columns.Add("Age");
        b.Columns.Add("Gender");
        b.Rows.Add("John", "45", "M");
        b.Rows.Add("Sebastian", "34", "M");
        b.Rows.Add("Marc", "23", "M");
        b.Rows.Add("Natalia", "34", "F");

        JsonSerializerSettings settings = new JsonSerializerSettings();
        settings.Converters.Add(new CustomDataSetConverter());
        settings.Formatting = Formatting.Indented;

        string json = JsonConvert.SerializeObject(x, settings);
        Console.WriteLine(json);
    }
}



输出:

Output:

{
  "type": "A",
  "value": "100",
  "details": [
    {
      "name": "John",
      "age": "45",
      "gender": "M"
    },
    {
      "name": "Sebastian",
      "age": "34",
      "gender": "M"
    },
    {
      "name": "Marc",
      "age": "23",
      "gender": "M"
    },
    {
      "name": "Natalia",
      "age": "34",
      "gender": "F"
    }
  ]
}

这篇关于转换数据集与多个数据表到JSON的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆