我如何将匿名类型与 LINQ 结合到 JSON?
How can i combine anonymous types with LINQ to JSON?
考虑以下 json 文件
{
"test": {
"CR": {
"name": "Car"
},
"BK": {
"name": "Bike"
}
}
我如何将匿名类型的使用与 LINQ to JSON 结合起来以创建
的键值对
CR Car
BK Bike
通过使用 LINQ 到 JSON?
我试过像下面这样简单的东西作为开始,但它甚至没有编译
JObject o = JObject.Parse(s);
var pairs = o["test"].Select(x => x.Value).ToList();
更准确地说是像这样的伪代码
var pairs = o["test"].Select( new { key = x => x.firstOrDefault().Name, value = x => x.Value}).ToList();
与其创建具有变量 属性 名称的 运行time 匿名类型,不如使用 LINQ to JSON 来创建重组的 JObject
,如下所示:
var pairs = new JObject( ((JObject)o["test"])
.Properties()
.Select(p => new JProperty(p.Name, p.Value["name"])) );
或者,如果您更喜欢 Dictionary<string, string>
,您可以这样做:
var dictionary = ((JObject)o["test"]).Properties()
.ToDictionary(p => p.Name, p => (string)p.Value["name"]);
或 ExpandoObject
:
var expando = new ExpandoObject();
foreach (var p in ((JObject)o["test"]).Properties())
{
IDictionary<string, object> d = expando;
d.Add(p.Name, (string)p.Value["name"]);
}
使用字典定义的 属性 名称创建 运行 时间的匿名类型非常重要,因为它需要 运行 时间代码生成。如果您真的需要这个,请参阅 。
演示 fiddle here.
考虑以下 json 文件
{
"test": {
"CR": {
"name": "Car"
},
"BK": {
"name": "Bike"
}
}
我如何将匿名类型的使用与 LINQ to JSON 结合起来以创建
的键值对 CR Car
BK Bike
通过使用 LINQ 到 JSON?
我试过像下面这样简单的东西作为开始,但它甚至没有编译
JObject o = JObject.Parse(s);
var pairs = o["test"].Select(x => x.Value).ToList();
更准确地说是像这样的伪代码
var pairs = o["test"].Select( new { key = x => x.firstOrDefault().Name, value = x => x.Value}).ToList();
与其创建具有变量 属性 名称的 运行time 匿名类型,不如使用 LINQ to JSON 来创建重组的 JObject
,如下所示:
var pairs = new JObject( ((JObject)o["test"])
.Properties()
.Select(p => new JProperty(p.Name, p.Value["name"])) );
或者,如果您更喜欢 Dictionary<string, string>
,您可以这样做:
var dictionary = ((JObject)o["test"]).Properties()
.ToDictionary(p => p.Name, p => (string)p.Value["name"]);
或 ExpandoObject
:
var expando = new ExpandoObject();
foreach (var p in ((JObject)o["test"]).Properties())
{
IDictionary<string, object> d = expando;
d.Add(p.Name, (string)p.Value["name"]);
}
使用字典定义的 属性 名称创建 运行 时间的匿名类型非常重要,因为它需要 运行 时间代码生成。如果您真的需要这个,请参阅
演示 fiddle here.