C# 如何使匿名类型属性名动态?
我有以下LinqToXml查询:C# 如何使匿名类型属性名动态?,c#,linq,anonymous-types,C#,Linq,Anonymous Types,我有以下LinqToXml查询: var linqDoc = XDocument.Parse(xml); var result = linqDoc.Descendants() .GroupBy(elem => elem.Name) .Select(group => new { TagName = group.Key.ToString(), Values = group.Attributes("Id") .S
var linqDoc = XDocument.Parse(xml);
var result = linqDoc.Descendants()
.GroupBy(elem => elem.Name)
.Select(group => new
{
TagName = group.Key.ToString(),
Values = group.Attributes("Id")
.Select(attr => attr.Value).ToList()
});
是否可以以某种方式将我的匿名类型字段设置为变量值,使其成为(不工作):
不,即使是匿名类型也必须有编译时字段名。它似乎需要一个不同类型的集合,每个类型都有不同的字段名。也许你可以用
字典来代替
var result = linqDoc.Descendants()
.GroupBy(elem => elem.Name)
.ToDictionary(
g => g.Key.ToString(),
g => g.Attributes("Id").Select(attr => attr.Value).ToList()
);
请注意,字典可以轻松序列化为JSON:
{
"key1": "type1":
{
"prop1a":"value1a",
"prop1b":"value1b"
},
"key2": "type2":
{
"prop2a":"value2a",
"prop2b":"value2b"
}
}
您想以友好的方式命名类型的字段吗?假设a
是该匿名类型的实例。如果您不知道该字段的名称,现在如何获取该字段的值?不知道*。即使可能,你将如何访问该字段?考虑使用<代码>字典<代码>;使用ToDictionary
-method很容易创建。您可以使用ExpandoObject而不是匿名类?@voo那么您就有XY问题了。询问如何将编译时没有静态模式的数据序列化为JSON。这样做的适当方式几乎肯定不会涉及匿名类型。
{
"key1": "type1":
{
"prop1a":"value1a",
"prop1b":"value1b"
},
"key2": "type2":
{
"prop2a":"value2a",
"prop2b":"value2b"
}
}