C# 如何将匿名类型与LINQ to JSON结合起来?
考虑以下json文件C# 如何将匿名类型与LINQ to JSON结合起来?,c#,json,linq,json.net,linq-to-json,C#,Json,Linq,Json.net,Linq To Json,考虑以下json文件 { "test": { "CR": { "name": "Car" }, "BK": { "name": "Bike" } } 如何结合使用匿名类型和LINQ to JSON来创建 CR车 BK自行车 通过使用LINQ到JSON 我已经尝试了一些简单的东西,比如下面的start,
{
"test": {
"CR": {
"name": "Car"
},
"BK": {
"name": "Bike"
}
}
如何结合使用匿名类型和LINQ to JSON来创建
CR车
BK自行车
通过使用LINQ到JSON
我已经尝试了一些简单的东西,比如下面的start,但它甚至没有编译
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();
与使用变量属性名创建运行时匿名类型不同,您可以使用创建重构的JObject,如下所示: 或者,如果您喜欢字典,您可以:
var dictionary = ((JObject)o["test"]).Properties()
.ToDictionary(p => p.Name, p => (string)p.Value["name"]);
或ExpandooObject:
使用字典定义的属性名创建运行时匿名类型非常重要,因为它需要生成运行时代码。如果你真的需要这个,请参阅
演示小提琴。您应该通过名称或强制转换来访问测试属性JProperty@OlivierRogier我不知道如何展示如何使用JSON来回答这个在运行时创建匿名类型的问题。。。除非OP澄清了他们真正想要实现的目标。@OrElse您熟悉lambda表达式吗?我建议您先看一下它的基础知识,然后编写代码compile@OlivierRogier我可以问一下为什么要结束这个问题吗?您可以始终使用LINQ to JSON在原始JObject的基础上创建一个新的JObject,即var pairs=new JObject JObjecto[test].Properties.Selectp=>new JPropertyp.Name,p.Value[Name];。或者,如果您更喜欢字典,那么var dictionary=jobject[test].Properties.ToDictionaryp=>p.Name,p=>stringp.Value[Name];。见:
var dictionary = ((JObject)o["test"]).Properties()
.ToDictionary(p => p.Name, p => (string)p.Value["name"]);
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"]);
}