2014-07-20 4 views
-1

Disons que j'ai deux classes, à savoir personne et projet:Comment de/sérialiser objets imbriqués avec Json.Net

class Person { 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

class Project { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public List<Person> Workers { get; set; } 
} 

Je veux stocker les données de la personne et les données de projet dans des fichiers distincts nommés et person.json project.json.

Pour sérialiser les données que j'utilise la déclaration ci-dessous:

JsonConvert.SerializeObject(Collection, Formatting.None, new JsonSerializerSettings() 
    { 
     NullValueHandling = NullValueHandling.Ignore, 
     TypeNameHandling = TypeNameHandling.All 
    };) 

où la collecte est un List<People>.

désérialiser les données de personne que j'utilise la déclaration ci-dessous:

JsonConvert.DeserializeObject<List<T>>(json, , new JsonSerializerSettings() 
    { 
     NullValueHandling = NullValueHandling.Ignore, 
     TypeNameHandling = TypeNameHandling.All 
    };) 

où JSON est les données JSON de chaîne de la person.json. J'affiche le List<Person> dans un ListBox. Maintenant, je ne sais pas comment je devrais stocker les données du projet de sorte que chaque fois que je modifie un objet personne et finalement l'enregistrer dans le fichier person.json, l'objet personne respectif dans l'objet List<Person> dans le fichier de projet mises à jour.

Je ne suis même pas sûr que json soit un bon moyen de le faire ou pas et peut-être que je devrais essayer une base de données relationnelle.

Veuillez me faire savoir si je n'ai pas bien expliqué ma situation. J'ai vraiment besoin de faire le travail avec JSON et de chercher une solution à mon problème. Toute aide est appréciée.

+1

Vous devez réécrire le fichier JSON avec un nouveau contenu. Et oui, il semble qu'une base de données relationnelle est plus appropriée. JSON et XML sont des formats * de transport *, ils ne sont pas idéaux en tant que * formats * de stockage. –

+0

@ LasseV.Karlsen - De nombreux systèmes utilisent JSON comme format de stockage.Ce qu'il demande nécessite une couche de gestion pour les données, quel que soit le format. –

Répondre

2

Votre question ne concerne pas vraiment la sérialisation, mais plutôt la synchronisation des données. Considérez pour un moment que vous auriez le même problème si vous utilisiez du XML, des fichiers texte ou un format binaire personnalisé. Comme vous avez dénormalisé l'objet Person dans l'objet Project, chaque fois que vous enregistrez un projet, il aura une copie complète de toutes les données de personne.

Une option serait de ne pas dénormaliser, et au lieu il suffit de mettre une liste de PersonID dans l'objet Project. En fonction du chemin le plus important dans votre application, vous pouvez également ajouter une liste de ProjectID dans l'objet Personne. En d'autres termes, la relation peut être exprimée de toute façon.

D'une manière ou d'une autre, vous aurez besoin de quelque chose pour gérer vos données. Il se peut que vous écriviez un tas de code pour charger tous les fichiers JSON du disque et que vous les manipuliez vous-même. Il se peut que vous mappiez vos données structurées à un schéma relationnel qui pourrait être stocké dans une base de données telle que SQL Server ou MySQL. Vous pouvez utiliser un ORM comme EntityFramwork ou NHibernate pour vous aider. Alternativement, vous pouvez utiliser l'une des bases de données NoSQL comme RavenDB ou MongoDB, ou de nombreux autres projets similaires. En d'autres termes, gardez les idées de sérialisation et de stockage séparées. Parfois, la sérialisation est impliquée dans le stockage, mais la sérialisation est également impliquée dans le transport, et de nombreux moteurs de stockage traitent la sérialisation de manière personnalisée.