>请考虑以下 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# 匿名对象。
演示小提琴在这里。