来自c#linq的json的父节点中的动态值 [英] dynamic value in parent node in json from c# linq
本文介绍了来自c#linq的json的父节点中的动态值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要动态设置父节点的值我正在使用LINQ在数据表中获取结果你能帮忙吗?
I need to set the value of the parent node dynamically I am using LINQ to obtain result in the data table can you please help?
数据表数据.
+-----------------+----------------------------------------+-----------+
| Key | Value | filetype |
+-----------------+----------------------------------------+-----------+
| Sorry | UNDSKYLD! | Associate |
| ValSpace | Mellemrum er ikke tilladt | Associate |
| UpdtProfile_Sub | Актуализация на потребителски профил | Emails |
| UplineMail_msg | Моля, потвърдете Нивото на потребителя | Emails |
+-----------------+----------------------------------------+-----------+
我尝试过的.
DataTable dt = fillDataTable();
var result = from row in dt.AsEnumerable()
group row by row.Field<string>("filetype") into Group
let row = Group.First()
select new
{
filetype = Group.Select(row => new clsTranslation
{
Key = row.Field<string>(0),
Value = row.Field<string>(1),
}).ToDictionary(pair => pair.Key, pair => pair.Value)
};
string newjson = JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.Indented);
收到结果.
{
"filetype": {
"Sorry": "UNDSKYLD! ",
"ValSpace": "Mellemrum er ikke tilladt ",
},
"filetype": {
"UpdtProfile_Sub": "Актуализация на потребителски профил ",
"UplineMail_msg": "Моля, потвърдете Нивото на потребителя",
}
}
预期结果.
{
"Associate": {
"Sorry": "UNDSKYLD! ",
"ValSpace": "Mellemrum er ikke tilladt ",
},
"Emails": {
"UpdtProfile_Sub": "Актуализация на потребителски профил ",
"UplineMail_msg": "Моля, потвърдете Нивото на потребителя",
}
}
推荐答案
有两种方法.
- 更多通用JSON
- 根据您的要求
var dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("Key"), new DataColumn("Value"), new DataColumn("filetype") });
dt.Rows.Add("Sorry", "UNDSKYLD!", "Associate");
dt.Rows.Add("ValSpace", "Mellemrum er ikke tilladt", "Associate");
dt.Rows.Add("UpdtProfile_Sub", "Актуализация на потребителски профил", "Emails");
dt.Rows.Add("UplineMail_msg", "Моля, потвърдете Нивото на потребителя", "Emails");
通用方法
var rez = dt.AsEnumerable()
.GroupBy(gp => gp.Field<string>("filetype")).ToList()
.Select(fe => new
{
Type = fe.Key,
Data = fe.ToList().Select(ss => (ss.Field<string>("Key").ToString(), ss.Field<string>("Value")))
});
//would be generic
Console.Writeline(JsonConvert.SerializeObject(rez, Newtonsoft.Json.Formatting.Indented));
您要求的另一种方法
JArray jArray = new JArray();
dt.AsEnumerable()
.GroupBy(gp => gp.Field<string>("filetype")).ToList()
.ForEach(fe =>
{
var jo = new JObject();
var test = JObject.FromObject(jo);
fe.ToList().ForEach(e =>
{
test.Add(e.Field<string>("Key"), e.Field<string>("Value"));
});
jo.Add(fe.Key, test);
jArray.Add(jo);
});
Console.WriteLine(JsonConvert.SerializeObject(jArray, Newtonsoft.Json.Formatting.Indented));
第一种方法结果:
[
{
"Type": "Associate",
"Data": [
{
"Item1": "Sorry",
"Item2": "UNDSKYLD!"
},
{
"Item1": "ValSpace",
"Item2": "Mellemrum er ikke tilladt"
}
]
},
{
"Type": "Emails",
"Data": [
{
"Item1": "UpdtProfile_Sub",
"Item2": "Актуализация на потребителски профил"
},
{
"Item1": "UplineMail_msg",
"Item2": "Моля, потвърдете Нивото на потребителя"
}
]
}
]
第二种方法结果:
[
{
"Associate": {
"Sorry": "UNDSKYLD!",
"ValSpace": "Mellemrum er ikke tilladt"
}
},
{
"Emails": {
"UpdtProfile_Sub": "Актуализация на потребителски профил",
"UplineMail_msg": "Моля, потвърдете Нивото на потребителя"
}
}
]
这篇关于来自c#linq的json的父节点中的动态值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文