Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将匿名类型与LINQ to JSON结合起来?_C#_Json_Linq_Json.net_Linq To Json - Fatal编程技术网

C# 如何将匿名类型与LINQ to 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,

考虑以下json文件

{
  "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"]);
}