我一直在讨论这个问题已有一段时间了。基本上我有一个
Dictionary<string, object>
有一些值表示类型。例如Person
。
这是我的基类:
Public class Person
{
private string _name;
private string _lastname;
private Adress _adress;
public Person()
{
}
public string Name
{
get{ return this._name; }
set{ this._name = value; }
}
public string LastName
{
get{ return this._lastname; }
set{ this._lastname = value; }
}
public Adress HomeAdress
{
get{ return this._adress; }
set{ this._adress = value; }
}
}
我还有其他一些类,我希望从Person
变量中的值构造这个Dictionary<string, object>
对象。
Private Person person;
Dictionary<string, object> test(Dictionary<string,object>)dictionary.GetValueOrDefault(nameof(person), null);
Type type = typeof(Person);
var obj = Activator.CreateInstance(type);
foreach (var kv in test)
{
type.GetProperty(kv.Key).SetValue(obj, kv.Value);
}
this.person= (Person)obj;
但是,Person中的地址属性是一个对象,无法像这样转换为地址。那么我如何进行此操作而无需编写无数if()
语句来确定Cast需要的whitch类型。
最重要的是要使用Person
中的值填充此Dictionary<string, object>
对象。填写此词典。并且有价值。我没有发布填写词典的所有代码,因为我不想让它混淆。
提前致谢。
答案 0 :(得分:0)
如果它是带有字典的嵌套字典,您可以通过将字典序列化为JSON然后将JSON反序列化为Person对象来解决它。
使用JSON.NET的示例:
var dictionary = new Dictionary<string, object>
{
{"Name", "Erik"},
{"HomeAddress", new Dictionary<string, object>
{
{"Street", "Foo"}
}}
};
var json = JsonConvert.SerializeObject(dictionary);
var person = JsonConvert.DeserializeObject<Person>(json);