2015-11-26 2 views
0

Je souhaite désérialiser un objet json dans une classe C# et avoir un objet par défaut complètement rempli même si mon JSON ne contient pas les informations. J'ai essayéLa désérialisation de JSON.Net remplit les propriétés manquantes

  • Annotation avec [DefaultValue]
  • Création des constructeurs pour les classes
  • désérialisation avec un objet Paramètres

Paramètres objet:

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

Tenez compte de ces C# classes

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

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

Considérez cette JSON

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

Comment puis-je désérialiser cette JSON dans un objet avec les données disponibles sérialisé dans un nouvel objet et les propriétés manquantes, dans ce cas, mis à string.empty?

Répondre

0

La meilleure solution est de mettre la valeur par défaut vous voulez dans le constructeur.

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

Merci, c'est ce que je suis allé avec. Crée des contstructors et les initialise partout. Bien que je pense toujours qu'il devrait pouvoir initialiser le tout par des annotations et l'objet 'JsonSerializerSettings' mais peut-être le mot' Serializer' est primordial dans cette histoire parce que j'essaye de désérialiser. Si quelqu'un découvre une solution JsonNet pure sans avoir à passer par les classes de création et de mise en place des objets que je voudrais savoir. –

0

Une solution pourrait être désérialiser en objet X, stocker vos paramètres par défaut dans l'objet Y, puis utiliser quelque chose comme AutoMapper pour cartographier les valeurs non nulles de X à Y.