如何将匿名类型与 LINQ to JSON 结合使用?



>请考虑以下 JSON 文件

{
"test": {
"CR": {
"name": "Car"
},
"BK": {
"name": "Bike"
}
}

如何将匿名类型的使用与 LINQ to JSON 结合使用以创建

CR Car
BK Bike

通过使用 LINQ to 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();

可以使用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"]);
}

使用字典定义的属性名称创建运行时匿名类型非常重要,因为它需要生成运行时代码。 如果确实需要此功能,请参阅具有字典中属性的 C# 匿名对象

演示小提琴在这里。

相关内容

  • 没有找到相关文章

最新更新