在属性名称为动态时使用ExpandoObject,这可能吗?

coo*_*eze 0 c# dynamic expandoobject

我需要创建一个具有动态命名属性的对象,例如:

<users>
  <user1name>john</user1name>
  <user2name>max</user2name>
  <user3name>asdf</user3name>
</users>
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Jon*_*eet 5

是的,一点没错。只需将其用作IDictionary<string, object>填充:

IDictionary<string, object> expando = new ExpandoObject();
expando["foo"] = "bar";

dynamic d = expando;
Console.WriteLine(d.foo); // bar
Run Code Online (Sandbox Code Playgroud)

在您的XML情况下,您将遍历元素,例如

var doc = XDocument.Load(file);
IDictionary<string, object> expando = new ExpandoObject();
foreach (var element in doc.Root.Elements())
{
    expando[element.Name.LocalName] = (string) element;
}
Run Code Online (Sandbox Code Playgroud)

  • @cool:因此,将其投射回ExpandoObject。如果那行不通,请询问一个新的细节问题。 (2认同)