如何将类转换成Dictionary <string,string>?

现在我再解释一下我对字典的渴望! 从我以前的问题回答这个问题是在我的脑海里出现!

现在的实际问题是我可以转换类字典?

在字典中,我希望我的类属性为KEY ,特定属性的值为VALUE

假设我的课是

public class Location { public string city { get; set; } public string state { get; set; } public string country { get; set; } 

现在假设我的数据是

 city = Delhi state = Delhi country = India 

现在你可以轻松理解我的观点了!

我想做词典! 那个字典应该是这样的

 Dictionary<string,string> dix = new Dictionary<string,string> (); dix.add("property_name", "property_value"); 

我可以得到的价值! 但是,我怎样才能得到属性名称( 不值 )?

我应该编码来创build它dynamic的! 这应该适用于我想要的每一个class级?

你可以理解这个问题

我怎样才能得到特定类的属性列表?

这是配方:1reflection,1 LINQ的对象!

  someObject.GetType() .GetProperties(BindingFlags.Instance | BindingFlags.Public) .ToDictionary(prop => prop.Name, prop => prop.GetValue(someObject, null)) 

自从我发表这个答案后,我检查了很多人认为它有用。 我邀请大家寻找这个简单的解决scheme来检查另一个问题,我把它推广到一个扩展方法: 映射对象到字典,反之亦然 。

这里有一个没有linqreflection的例子:

  Location local = new Location(); local.city = "Lisbon"; local.country = "Portugal"; local.state = "None"; PropertyInfo[] infos = local.GetType().GetProperties(); Dictionary<string,string> dix = new Dictionary<string,string> (); foreach (PropertyInfo info in infos) { dix.Add(info.Name, info.GetValue(local, null).ToString()); } foreach (string key in dix.Keys) { Console.WriteLine("nameProperty: {0}; value: {1}", key, dix[key]); } Console.Read(); 

试试这个。

  public static Dictionary<string, object> ObjectToDictionary(object obj) { Dictionary<string, object> ret = new Dictionary<string, object>(); foreach (PropertyInfo prop in obj.GetType().GetProperties()) { string propName = prop.Name; var val = obj.GetType().GetProperty(propName).GetValue(obj, null); if (val != null) { ret.Add(propName, val.ToString()); } else { ret.Add(propName, null); } } return ret; } 
 protected string getExamTimeBlock(object dataItem) { var dt = ((System.Collections.Specialized.StringDictionary)(dataItem)); if (SPContext.Current.Web.CurrencyLocaleID == 1033) return dt["en"]; else return dt["sv"]; } 

我想使用JToken添加reflection的替代方法。 你将需要检查两者之间的基准差异,看看哪个有更好的performance。

 var location = new Location() { City = "London" }; var locationToken = JToken.FromObject(location); var locationObject = locationObject.Value<JObject>(); var locationPropertyList = locationObject.Properties() .Select(x => new KeyValuePair<string, string>(x.Name, x.Value.ToString())); 

注意这个方法对于平面类结构是最好的。