2017-10-31 2 views
0

私はしばらくこの問題で苦労しています。基本的に私は 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; } 
    } 

} 

私は私Dictionary<string, object>変数内の値からこのPersonオブジェクトを構築したいと思います他のいくつかのクラスを持っているよりも。

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のadressプロパティはObjectであり、そのようなAdressに変換することはできません。だから、キャストにwhitchタイプを決定するための無数の文を書く必要なしで、これについてどうすればよいのですか?if()

PersonオブジェクトにはDictionary<string, object>の値が設定されています。この辞書にはデータが入力されています。その中に値を持っています。私はそれを混乱させたくないので、私は辞書の記入のためのすべてのコードを投稿しませんでした。

ありがとうございます。

+0

それはあなたのコードを持っている問題の種類は明らかではありません。エラーの詳細とそのエラーを再現するためのコードを入力してください –

+0

あなたはpersonオブジェクトからアドレスオブジェクトを正しく読み込みたいですか?他の変数に入れますか? –

+0

それは本当に説明するための非常に抽象的なものです。この辞書そこからPerson変数を作るためのすべての情報が含まれています。しかし、私はあなたがそれを呼びたいと思っているものを変換/読み込み/抽出することで苦労しています。この辞書から。文字列では問題ありません。しかし、すぐに別のタイプが使用されます。それは文字列、intまたはboolのような基本型ではありません。それはオブジェクトを変換することができないとクラッシュ - > Adress – Feddex

答えて

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); 
+0

はい!それがトリックでした!どうもありがとうございます。私はこれのための解決策を数時間探してきました! – Feddex

関連する問題