11
votes

Utilisation de json.net - sérialisation personnalisée partielle d'un objet C #

I MA Utilisez JSON.NET 'JSON.NET pour sérialiser certains et grémés d'objets à JSON. Les objets ont un ensemble de propriétés communs mais ont également une propriété méta qui est un dictionnaire

lors de la sérialisation, je souhaite que les paires de la valeur de clé soient ajoutées à mon objet JSON comme si elles sont les propriétés de niveau racine, comme celle-ci ... p> xxx pré>

pas comme ceci: p>

 {
    id: 1,
    name:'jeff',
    meta:{
       food:'spinch',
       spoon: 'ýes'
    }
 } 


1 commentaires

Vous pouvez jeter un coup d'œil sur cette duplicate possible: Stackoverflow.com/questions/ 4557220 / ...


3 Réponses :


4
votes

Vous pouvez le faire en créant votre propre jsonconverter , puis ajoutant un attribut à la classe que vous souhaitez sérialiser. [JSONCONVERTER (typeOf (myconverter))]

exemple ici - http: / /www.lostechnies.com/blogs/rhouston/archive/2008/02/25/a-custom-converter-for-json-net.aspx


4 commentaires

Ou simplement utiliser KeyValuePaireconverter James.Newtonking.com/projects/json/jelp / html / ...


Pouvez-vous développer ce bassfriend - comment utilisez-vous cela dans une classe? Souhaitez-vous hériter de cela et transmettez-vous dans toutes les propriétés de la classe plus le dictionnaire?


Stackoverflow.com/Questtions/5124889/...


Mais pour fusionner les propriétés de la classe au même niveau que les clés et les valeurs que l'OP vous a demandé, vous devrez faire quelque chose de plus, n'est-ce pas?



0
votes

Vous pouvez utiliser Le fichier de données .NET DatacontractjsonSerializer < / a>.

Pour la sérialisation personnalisée, voir:

http://msdn.microsoft.com/ fr-US / bibliothèque / system.runtime.serialization.idatacontractSurrogate.aspx

Un avantage d'utiliser idatacontranctsurrogate (comparé à l'ajout simplement des propriétés à votre classe pour la sérialisation) est que vous n'avez pas à mélanger les propriétés réelles et les propriétés de sérialisation ensemble dans la même classe.

Un autre avantage (comparé à avoir à faire la sérialisation personnalisée contre un sac de propriété, ALA KeyValuePaireConverter ) est que vous devez ajouter uniquement des attributs aux propriétés de vos classes (le type réel et le type de substitution) et vous pouvez écrire tout votre code de conversion / personnalisé directement par rapport à ces types. Cela conserve votre code de code supérieur et permet au cadre de traiter le mécanisme de transport exact.


0 commentaires

2
votes

Si votre dictionnaire est une chaîne to objet Dictionnaire peut simplement utiliser l'attribut [jsonextensiondata] : xxx

voir Comment sérialiser un dictionnaire dans le cadre de son Objet parent utilisant json.net .


0 commentaires