2017-06-01 59 views
1

我想反序列化一個json字符串到我的對象而無需創建我的對象的新實例,因爲我的應用程序啓動時加載了我的對象,我只想更新我的類的屬性,並且不想在創建新實例時使用json反序列化。如何在沒有在C#JSON中創建對象的新實例的情況下反序列化對象?

佛例如正常JSON在這個例子中deserialer做工精細而這個創建對象的新實例:

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)。請參閱[這裏](https://stackoverflow.com/q/27511675/3744182)瞭解類似的問題。 – dbc

+0

工作正常謝謝,這個問題不來我的serach ... –

回答

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()覆蓋退出性能。在我的解決方案中,退出屬性不會覆蓋。

相關問題