Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 如何使匿名类型属性名动态?_C#_Linq_Anonymous Types - Fatal编程技术网

C# 如何使匿名类型属性名动态?

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

我有以下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")
        .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"
            }
}