2017-06-01 2 views
1

私のオブジェクトが読み込まれたときに私のオブジェクトがロードされ、私のクラスのプロパティを更新したいと思って、jsonのデシリアライゼーションを使って新しいインスタンスを作成したくないので、オブジェクトの新しいインスタンスを作成せずにjsonの文字列をデシリアライズしたい。この例では例の通常のJSON deserialer作業罰金FoをC#JSONでオブジェクトの新しいインスタンスを作成せずにオブジェクトを逆シリアル化するには?

、これはオブジェクトの新しいインスタンスを作成します。私の場合は

var obj = JsonConvert.DeserializeObject<MyData>("json string to deserialize"); 

を、私は私のオブジェクトのインスタンスを持っていると私は私のオブジェクトにプロパティをデシリアライズし、マッピングしたいです興味のある質問だった:

MyData data = new MyData() { Age = 27, Name = "Ali" }; 
    //this is my case what I want: 
    JsonConvert.DeserializeObject("json string to deserialize and mapp", ref data); 
    //or: 
    JsonConvert.DeserializeObject("json string to deserialize and mapp", data); 
+2

['JsonConvert.PopulateObject()'](http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_JsonConvert_PopulateObject.htm)が必要です。同様の質問については、[here](https://stackoverflow.com/q/27511675/3744182)を参照してください。 – dbc

+0

うまく働いてくれてありがとうございました。その質問は私の奴隷には来ません... –

答えて

0

これはどう:

var data = new MyData() { Age = 27, Name = "Ali" }; 
    var dataType = typeof(MyData); 
    var obj = JsonConvert.DeserializeObject<MyData>(richTextBox1.Text); 

    var binding = BindingFlags.Instance | BindingFlags.Public; 
    var properties = obj.GetType().GetProperties(binding); 
    foreach (var property in properties) 
    { 
     if (!property.CanRead) 
      continue; 

     var value = property.GetValue(obj); 

     if (ReferenceEquals(value, null)) 
      continue; 

     dataType.GetProperty(property.Name).SetValue(data, value); 
    } 

注:プロパティを終了 JsonConvert.PopulateObject()上書き。私の解決策のプロパティでは上書きしません。

関連する問題