6
votes

WCF - Comment sérialiser et désérialiser à Json?

J'ai écrit peu de classes (contrats de données et contrats de service) dans WCF et j'essaie de sérialiser et de désérialiser à Json. Si j'ai besoin de la structure JSON suivante, comment créerai-je le (s) Datacontract (s):

[DataContract]
    public class Response
    {
        [DataMember]
        public string locations { get; set; }

        [DataMember]
        public string error{ get; set; }
    }


0 commentaires

3 Réponses :


3
votes

visitez http://json.codeplex.com/ . Utilisez xxx pré>

pour activer votre objet en chaîne JSON. Utilisez P>

JsonConvert.PopulateObject


0 commentaires

12
votes

Les objets complets que vous recherchez doivent être structurés comme suit: xxx

Vous devez configurer la hiérarchie de l'objet, comme indiqué par le { et et et } , ainsi que les propriétés ienumerables / array, comme indiqué par le [ et ] à partir de votre sortie JSON souhaitée.

le Le site peut être déroutant, car il n'y a pas d'exemples simples, mais s'il vous plaît examiner introduisant JSON pour une compréhension de base de la syntaxe . Un autre bon site que je suis venu, avec quelques exemples simples, était JSON et XML Serialization dans ASP.NET Web API .

Grâce à certaines directives de Vittore, j'ai remarqué que pour construire la correspondance exacte à votre sortie JSON, vous aura besoin d'objets comme: xxx

Je les ai ajoutés dans un deuxième bloc de code ici, car une telle structure semble inutilement compliquée. Toutefois, si vous êtes dans une position où vous pouvez modifier la sortie attendue de votre JSON, j'irais avec le premier bloc, avec la modification supplémentaire de la création des deux colonnes dans int Types.

Ces types ont été créés pour prendre en charge un service similaire à celui de la configuration à Service WCF Pour revenir à JSON et testé à l'aide du code suivant: xxx

détails sur DatacontractjsonSerializer

Notez également que si vous avez la possibilité de configurer une place reposante. Service Web, vous pouvez ensuite suivre les directives de Comment créer un service réparateur JSON WCF en 60 secondes .


6 commentaires

Je préférerais nommer des classes et des propriétés de manière appropriée selon les normes de codding C # (I E Emplacement non de l'emplacement) et utilisez des indications dans Datamember, etc. Attributs, c'est-à-dire [Datamember (nom = "Emplacement")] Emplacement de la classe public


Une autre chose que je viens de remarquer que l'un ou l'autre Starter Starter a une erreur par exemple JSON JSON BAYLOAD, ou vous devrez introduire une autre classe, car il dispose de l'objet emplacements avec la propriété emplacement qui est Array de quelque chose (apparemment de ce que vous avez appelé emplacement objet dans votre extrait C #)


Merci gars pour l'aide. Mike, basé sur la méthode de sérialisation Avez-vous mis en œuvre les structures ci-dessus? La sérialisation .NET ou JSON.net? Parce que je me demandais si cela peut être fait à l'aide de la sérialisation native.


@Mike j'ai utilisé le deuxième bloc que vous avez mentionné à l'exception du contrat de données "ResponseParent". Je reçois la sortie similaire à celle-ci: {"Réponse": {"Emplacements": [{"ID": "3", "Nom": "Quelque chose", "StatutId": "3"}, {"Id" : "5", "nom": "quelque chose", "StatutId": "8"}], "ErrorCode": "OK"}} Quels changements dois-je apporter pour ajouter une balise "Emplacement" pour chacun de "ID, Nom, statut de statut "paires? Comme ce qui suit: "Emplacements": {"Lieu": [{....}, "Lieu": [{...


@Pavanwelihinda Je pense que vous voulez dire "emplacements": [{"Lieu": {...}}, "Emplacement": {...}}] . Notez comment vous modifiez l'arrangement hiérarchique du [ ] . Que ferait ce changement dans votre modèle d'objet? Dans ce cas, réponse aurait la matrice de EmplacementCollectionInmermediate et EmplacementCollectionInmermedate n'aurait qu'une seule adresse , tandis que Datamember Les noms resteraient les mêmes.


J'espère que vous regardez toujours ce fil. J'aimerais voir ces contrats de données épinés. Je travaille sur un gestionnaire de transactions de base de données utilisant JSON. Je viens de commencer à lancer de la boue à cette clôture de fil de poulet et plus se colle, pardonnez à la métaphore. Je suis commencé à attraper certains des aspects de la sérialisation JSON, mais j'aimerais voir l'énumération de l'emplacement épiniée. Merci les gars.



3
votes

Une fois que vous avez la structure exacte, attribuée, vous pouvez également utiliser JavasCrriptserializer classe à partir de System.web.script.Sériorialisation (car .net 3.5)

Quelque chose comme ça fonctionnera: xxx

encore plus simple que d'utiliser DatacontractSerializer , bien que je ne suis pas tout à fait sûr de ses réserves. Je l'ai utilisé plusieurs fois sans problème.

Vous pouvez également ajouter personnalisé JavascriptConverter S, ce qui permet de mettre en place Un moyen plus agréable de JSON dynamique avec une relative aisance.

L'analyse dynamique est également très simple de cette façon: xxx


0 commentaires