2015-11-26 69 views
0

我想反序列化一個json對象到一個c#類中,並且有一個完全填充的默認對象,即使我的JSON缺少這些信息。我試過JSON.Net反序列化填充缺少的屬性

  • 註釋與[默認值]
  • 創建構造函數的類
  • 反序列化與設置對象

設置對象:

new JsonSerializerSettings { 
    DefaultValueHandling = DefaultValueHandling.Populate 
    NulValueHandling = NullValueHandling.Include 
    ObjectCreationHandling = ObjectCreationHandling.Replace 
} 

考慮這些C#類

public class Root{ 
    public SpecialProperty name {get;set;} 
    public SpecialProperty surname {get;set;} 
} 

public class SpecialProperty { 
    string type {get;set;} 
    string value {get;set;} 
} 

考慮這個JSON

"Root" : { 
    "name" : { 
     "type" : "string", 
     "value": "MyFirstname" 
    } 
} 

我如何反序列化JSON這與序列化到一個新的對象現有的數據和缺少的屬性,在這種情況下一個對象,設置爲string.empty

回答

0

最簡單的解決辦法是把默認值你想在構造函數中。

public class Root 
{ 
    public SpecialProperty Name { get; set; } 
    public SpecialProperty Surname { get; set; } 

    public Root() 
    { 
     this.Name = SpecialProperty.GetEmptyInstance(); 
     this.Surname = SpecialProperty.GetEmptyInstance(); 
    } 
} 

public class SpecialProperty 
{ 
    public string Name { get; set; } 
    public string Type { get; set; } 

    public static SpecialProperty GetEmptyInstance() 
    { 
     return new SpecialProperty 
     { 
       Name = string.Empty, 
       Type = string.Empty 
     }; 
    } 
} 
+0

謝謝,這就是我一起去的。創建contstructors並在任何地方初始化它們。儘管我仍然認爲它應該能夠通過註釋和'JsonSerializerSettings'對象來初始化整個事物,但也許在這個故事中'Serializer'這個詞是最重要的,因爲我試圖反序列化。如果有人發現純粹的JsonNet解決方案,而無需通過創建和創建新對象的類,我想知道。 –

0

一種解決方案可能是反序列化到對象X,您的默認存儲到對象y,然後使用類似AutoMapper的非空值從X映射到Y