如何使用键,值对

时间:2017-10-31 13:47:37

标签: c# .net dictionary

我一直在讨论这个问题已有一段时间了。基本上我有一个 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>对象。填写此词典。并且有价值。我没有发布填写词典的所有代码,因为我不想让它混淆。

提前致谢。

1 个答案:

答案 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);