在C#中,如果只有索引编号,如何获取索引属性的名称?

时间:2012-06-13 00:38:31

标签: c# reflection properties litjson

我有一个由json mapper函数创建的对象(使用LitJson)。它包含索引属性。

我可以遍历属性并获取每个属性值,如此

for(int i = 0; i < jdata.Count;i++) {
    Console.WriteLine(jdata[i]);
} 

我想将每个属性名称作为字符串,而不是属性值。

我发现的最接近的是这个 https://stackoverflow.com/questions/1011109/how-do-you-get-the-name-of-the-property

这有效吗

string name = ReflectionUtility.GetPropertyName((Sample2 s) => s.Foo);

但这不是(似乎因为它是一个索引属性?)

string name = ReflectionUtility.GetPropertyName((Sample2 s) => s[0]);

2 个答案:

答案 0 :(得分:2)

我发现在访问Keys属性之前必须将JsonData强制转换为IDictionary。

喜欢如此:

JsonData x = getMyData();//however you're getting your JsonData object
var keys = (x as IDictionary).Keys; // you should probably check for null 
foreach(string s in keys)
   Console.WriteLine("Another key: "+s);

答案 1 :(得分:1)

我找到了source code。看起来JsonData实现了IDictionary,因此您应该能够访问Keys属性。

索引器基本上是作为带索引参数的函数实现的,所以没有办法使用反射来得到一个&#34; Name&#34;与给定的指数相关联。