C# 使用嵌套对象键生成JSON
我试图从一些数据库记录中生成C#(.NETCore)中的JSON字符串 数据模式是扁平的,包含类别(字符串)、图书Id(整数)和图书名称(字符串) 数据行如下所示:C# 使用嵌套对象键生成JSON,c#,json.net,C#,Json.net,我试图从一些数据库记录中生成C#(.NETCore)中的JSON字符串 数据模式是扁平的,包含类别(字符串)、图书Id(整数)和图书名称(字符串) 数据行如下所示: Category BookId BookName --------------------------------------- Mystery 1 My first book Biography 2 My second book Mystery 3 M
Category BookId BookName
---------------------------------------
Mystery 1 My first book
Biography 2 My second book
Mystery 3 My third book
Crime 4 My fourth book
Romance 5 My fifth book
Biography 6 My sixth book
Mystery 7 My seventh book
Romance 8 My eight book
SciFi 9 My ninth book
Poetry 10 My tenth book
我正在运行一个简单的SQL查询,以获取C#列表
集合中的记录(最多5000条):
SELECT Category, BookId, BookName from Books
我想生成一个JSON字符串(最好使用Newtonsoft JSON.Net库),其中图书按类别分组,并包括类别和图书id作为嵌套对象键:
{
"Mystery": {
"1": {
"Name": "My first book"
},
"3": {
"Name": "My third book"
},
"7": {
"Name": "My seventh book"
}
},
"Biography": {
"2": {
"Name": "My second book"
},
"6": {
"Name": "My sixth book"
}
},
"Crime": {
"4": {
"Name": "My fourth book"
}
}
:
:
}
我尝试了字典
和查找
(可能比字典更好,因为哈希操作的开销更小),但我无法让它们生成我所追求的格式,主要用于JS对象中基于键的直接访问
对于性能方法的任何建议,我们将不胜感激。尝试将您的收藏转换为嵌套词典:
// use yor actual type here
var collection = new[]
{
new {Category = "Mystery", BookId = 1 , BookName = "My first book"},
new {Category = "Mystery", BookId = 2 , BookName = "My second book"}
};
var res = collection
.GroupBy(arg => arg.Category)
.ToDictionary(g => g.Key, g => g.ToDictionary(b => b.BookId, b => b.BookName));
JsonConvert.SerializeObject(res, Newtonsoft.Json.Formatting.Indented);
我将创建一个表示您想要的JSON的模型(DTO),将您的数据库结果映射到该模型,然后对该模型进行序列化。请共享您使用
字典和查找所尝试的代码。顺便说一句,您需要在一个json对象中保存所有内容还是应该是一个数组?谢谢,这很有效。但字典很重,特别是对于成千上万的嵌套字典。如果您有任何提高性能或替代方法的建议,我将不胜感激。如果性能不够好,您可以尝试通过JObject
在那里编写分组结果。但我建议你先对它进行基准测试。运行一些基准测试。原来ToDictionary
的创建速度至少是循环JObject
创建速度的两倍。