具有Parent和Child到JSON格式的数据表
我正在尝试从C#datatable构建JSON输出。 单个数据表也包含父级和子级。 我想使用LINQ来设置JSON数据,但是我想避免创建类,因为我有很多这样的要求,并且为每个创建类将是一个负担。
JSON输出应该是
{ 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} ]}
我试过的示例代码
//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("HEAD"), itemDetl = items. Where(item => (item.Field("HEAD") == group.Field("HEAD"))). Select(detl => new { a = detl.ToString() })//.ToList() }).ToList();
错误
Results View = The type 'f__AnonymousType0' exists in both 'APP-SERVICE.dll' and 'CommonLanguageRuntimeLibrary'
如果可以,请提供更好的代码。 提前致谢
在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);
或者,如果您无权访问JsonConvert,我建议使用标准的System.Web.Script.Serialization.JavaScriptSerializer:
static class Program { static void Main(string[] args) { var lst = new ListOfMachines(); lst.Add(new MachineInfo { Head = "Sports", Item = "Porshe 911", Quantity = 100 }); lst.Add(new MachineInfo { Head = "Sports", Item = "Porshe 912", Quantity = 200 }); lst.Add(new MachineInfo { Head = "Luxury", Item = "BMW 3 Series", Quantity = 300 }); lst.Add(new MachineInfo { Head = "Small", Item = "Toyouta Corolla", Quantity = 400 }); lst.Add(new MachineInfo { Head = "Small", Item = "Mitsubish Lancer", Quantity = 500 }); lst.Add(new MachineInfo { Head = "Small", Item = "Mitsubish Lancer 2", Quantity = 600 }); var json = lst.ToJson(); } } public class ListOfMachines : List { public string ToJson() { var initialGroupBy = this.GroupBy(a => a.Head, t => new { item = t.Item, quantity = t.Quantity} ).ToDictionary( k => k.Key, s => s.Select(v => new { item = v.item, quantity = v.quantity })); var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); string jsonString = javaScriptSerializer.Serialize(initialGroupBy); return jsonString; } } public class MachineInfo { public string Head { get; set; } public string Item { get; set; } public int Quantity { get; set; } }
此代码提供以下输出:
{ "Sports":[{"item":"Porshe 911","quantity":100},{"item":"Porshe 912","quantity":200}], "Luxury":[{"item":"BMW 3 Series","quantity":300}], "Small":[{"item":"Toyouta Corolla","quantity":400},{"item":"Mitsubish Lancer","quantity":500},{"item":"Mitsubish Lancer 2","quantity":600}]
}
- 如何在.Net 3.5框架中实现安全协议TLS 1.2
- XDocument to string:如何在声明中省略编码?
- System.Security.SecurityException:请求类型为’System.Security.Permissions.EnvironmentPermission,mscorlib’的权限失败
- json.net; 序列化entity framework对象(循环引用错误)
- .net核心中的GZIP无法正常工作
- 从MasterPage方法调用内容页面方法
- ASP.NET中的XML POST和解析
- 如何在c#中找到名称以某个字符串开头的HTML元素的数量?
- system.web.mail vs system.net.mail