我目前正在使用此代码来获取对象中的所有变量并将数据放置在Dictionary中(键是变量名,值是变量的内容)。
foreach (var property in PropertiesOfType<string>(propertiesJSON))
{
dictionary.Add(property.Key, property.Value);
}
在这段代码中, propertiesJSON 是我需要的对象。这是PropertiesOfType方法:
public static IEnumerable<KeyValuePair<string, T>> PropertiesOfType<T>(object obj)
{
return from p in obj.GetType().GetProperties()
where p.PropertyType == typeof(T)
select new KeyValuePair<string, T>(p.Name, (T)p.GetValue(obj));
}
当我对Dictionary进行任何数据测试时,没有任何值(我使用Visual Studio的调试工具进行检查,并且我的程序还打印出了Dictionary内的所有数据-当然不存在)。请告诉我我在这里犯的错误(我仍在学习编码,发布此书时我15岁。)
编辑:这是propertiesJSON的外观
var propertiesJSON = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.PropertiesJSON>(content);
这是课程本身:
class PropertiesJSON
{
public string botToken;
public bool girl;
public int age;
public string[] hi;
public string test;
}
谢谢。
答案 0 :(得分:6)
那些不是属性!
这些:
public string botToken;
public bool girl;
public int age;
public string[] hi;
public string test;
是所有字段。如果它们是属性,它们将看起来像这样:
public string botToken { get; }
public bool girl { get; }
public int age { get; }
public string[] hi { get; }
public string test { get; }
要获取字段,请使用GetFields
而不是GetProperties
。
return from p in obj.GetType().GetFields()
where p.FieldType == typeof(T)
select new KeyValuePair<string, T>(p.Name, (T)p.GetValue(obj));
我建议您将字段更改为所有属性。