动态对象属性名称以数字开头

时间:2014-03-29 16:04:30

标签: c# .net

我有一个动态对象,其属性以数字开头。如何访问此属性?

对于inst:

myResult.123; // this is unvalid

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

如果您正在为动态对象使用ExpandoObject,则可以转换为IDictionary<string, object>并使用索引器;

dynamic expando = new ExpandoObject();
var dict = (IDictonary<string, object>)expando;
dict["123"] = 2;

许多其他动态对象实现(例如Json.NET中的JObject)提供类似的功能。

以下是JObject的一个例子:

var json = JsonConvert.SerializeObject(new Dictionary<string, object> { { "123", 10 } });
var deserialized = JsonConvert.DeserializeObject<object>(json);

// using the IDictionary interface
var ten = ((IDictionary<string, JToken>)deserialized)["123"].Value<JValue>().Value;
Console.WriteLine(ten.GetType() + " " + ten); // System.Int64 10

// using dynamic
dynamic d = deserialized;
Console.WriteLine(d["123"].Value.GetType() + " " + d["123"].Value); // System.Int64 10

答案 1 :(得分:0)

修饰

Type t = myResult.GetType();
PropertyInfo[] props = t.GetProperties();
Dictionary<string, object> dict = new Dictionary<string, object>();
foreach (PropertyInfo prp in props)
{
   object value = GetPropValue(myResult, prp.Name);
   dict.Add(prp.Name, value);
}

public static object GetPropValue(object src, string propName)
{
   return src.GetType().GetProperty(propName).GetValue(src, null);
}