可以使用父和子数据转换为JSON格式 [英] Datatable with Parent and Child to JSON format

查看:268
本文介绍了可以使用父和子数据转换为JSON格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从C#datatable构建一个JSON输出。单个datatable也包含父和子。我想使用LINQ设置JSON数据,但是希望避免创建类,因为我有很多这样的要求,并为每个类创建类将是一个负担。





JSON输出应为

  {
运动:[
{item:'保时捷911',数量:100},
{item:'保时捷912',数量:200}

豪华:[
{item:'宝马3系',数量:300}
],
小:[
{item:'丰田花冠',数量:400},
{item:'Mitsubishi Lancer',数量:500},
{item:'Mitsubishi Lancer 2',数量:600}
]}

我尝试的示例代码

  //获取当前股票
DataTable dtCurrentStock = inventoryReports.getCurrentStock(currentDate);

//获取不同的项目组
DataTable dtItemGroup = dtCurrentStock.DefaultView.ToTable(true,HEAD);

DataSet sd = new DataSet();

var itemGroup = dtItemGroup.AsEnumerable();
var items = dtCurrentStock.AsEnumerable();

var result = itemGroup.Select(group => new {
groupName = group.Field< string>(HEAD),
itemDetl =
items
其中(item =>(item.Field< string>(HEAD)== group.Field< string>(HEAD)))
选择(detl =>
{
a = detl.ToString()
})//。ToList()
})ToList();

错误

 结果视图=APP-SERVICE.dll和CommonLanguageRuntimeLibrary中都存在类型&; f__AnonymousType0&aa> 

如果可用,请提供更好的代码。感谢提前

解决方案

在Linq的帮助下

  var obj = dt.AsEnumerable()
.GroupBy(r => r [Head])
.ToDictionary(g => g.Key.ToString )
g => g.Select(r => new {
item = r [Item] ToString(),
quantity =(int)r [Quantity ]
})
.ToArray());

var json = JsonConvert.SerializeObject(obj);


I am trying to build a JSON output from the C# datatable. The single datatable contains parent and child as well. I would like to use LINQ to setup the JSON data, but would like to avoid creating classes since I have many such requirements and creating classes for each will be a burden.

The JSON output should be

{
Sports : [
{item: 'Porsche 911', quantity: 100},
{item: 'Porsche 912', quantity: 200}
],
Luxury : [
{item: 'BMW 3 Series', quantity: 300}
],
Small :[
{item: 'Toyota Corolla', quantity: 400},
{item: 'Mitsubishi Lancer', quantity: 500},
{item: 'Mitsubishi Lancer 2', quantity: 600}
]}

Sample code I tried

//get current stock
            DataTable dtCurrentStock = inventoryReports.getCurrentStock(currentDate);

            //get distinct item group
            DataTable dtItemGroup = dtCurrentStock.DefaultView.ToTable(true, "HEAD");

            DataSet sd = new DataSet();

            var itemGroup = dtItemGroup.AsEnumerable();
            var items = dtCurrentStock.AsEnumerable();

            var result = itemGroup.Select(group => new {
                groupName = group.Field<string>("HEAD"),
                itemDetl = 
                items.
                Where(item => (item.Field<string>("HEAD") == group.Field<string>("HEAD"))).
                Select(detl => new
                {
                    a = detl.ToString()
                })//.ToList()
            }).ToList();

error

Results View = The type '<>f__AnonymousType0<a>' exists in both 'APP-SERVICE.dll' and 'CommonLanguageRuntimeLibrary'

Please provide a better code if available. Thanks in advance

解决方案

With the help of Linq

var obj = dt.AsEnumerable()
            .GroupBy(r => r["Head"])
            .ToDictionary(g => g.Key.ToString(),
                          g => g.Select(r => new {
                                                item = r["Item"].ToString(),
                                                quantity = (int)r["Quantity"]
                                             })
                                .ToArray());

var json = JsonConvert.SerializeObject(obj);

这篇关于可以使用父和子数据转换为JSON格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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