WCF - Comment sérialiser et désérialiser en JSON?
J'ai écrit quelques classes (les Données des contrats et des contrats de Service) dans WCF et je suis en train de sérialiser et désérialiser en JSON. Si j'ai besoin de structure JSON, comment pourrais-je créer l'DataContract(s):
{
"response": {
"locations": {
"location": [
{
"id": "12",
"name": "Hello",
"statusid": "78"
},
{
"id": "5",
"name": "Ann",
"statusid": "8"
}
]
},
"error": "404 error"
}
}
La structure ci-dessus est assez simple et en vertu d'endroits il peut y avoir plusieurs détails sur l'emplacement comme mentionné ci-dessus. J'ai donc besoin d'obtenir un tableau/liste des "lieux" de membres de données comme indiqué ci-dessous. Pour le moment j'ai suivantes DataContract seulement:
[DataContract]
public class Response
{
[DataMember]
public string locations { get; set; }
[DataMember]
public string error{ get; set; }
}
S'il vous plaît laissez-moi savoir comment je peux résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
La totalité des objets que vous recherchez doit être structurée comme:
Vous avez besoin pour l'installation de la hiérarchie de l'objet, comme indiqué par la
{
et}
, ainsi que l'interface IEnumerable /propriétés de la matrice, comme indiqué par la[
et]
de votre choix à la sortie JSON.Le site peut être source de confusion, car il n'y a pas d'exemples simples, mais s'il vous plaît examiner L'introduction de JSON pour une compréhension de base de la syntaxe. Un autre bon site je suis venu le long, avec juste quelques exemples simples, a été JSON et la Sérialisation XML dans ASP.NET Web API.
Grâce à quelques conseils par vittore, j'ai remarqué que, pour construire la correspondance exacte à votre sortie JSON, vous aurez besoin des objets comme:
J'ai ajouté dans un deuxième bloc de code ici, parce qu'une telle structure semble inutilement compliqué. Toutefois, si vous êtes dans une position où vous pouvez changer la sortie attendue de votre JSON, j'irais avec le premier bloc, avec la modification supplémentaire de faire les deux
Id
colonnes dansint
types.Ces types ont été créés pour soutenir un service similaire à l'installation à Service WCF retour JSON, et testé en utilisant le code suivant:
Détails sur DataContractJsonSerializer
Notez également que si vous avez la possibilité de configurer un service web RESTful, alors vous pouvez suivre les lignes directrices de Comment créer un JSON WCF Service RESTful en 60 secondes.
[DataMember(Name="location")] public class Location
locations
avec la propriétélocation
qui est la matrice de quelque chose ( apparemment de ce que vous avez appelélocation
objet en c# extrait)"locations" : [{"location" : {...}}, "location" : {...}}]
. Remarquez comment vous vous êtes modification de l'organisation hiérarchique de la[
]
. Ce qui pourrait faire de ce changement dans l'objet de votre modèle? Dans ce cas,Response
aurait le tableau deLocationCollectionIntermediate
etLocationCollectionIntermediate
aurait suffit d'un seulLocation
, tandis que leDataMember
les noms restent les mêmes.Visite http://json.codeplex.com/. Utilisation
de transformer votre objet dans une chaîne JSON. Utilisation
à tourner chaîne JSON en objet.
Une fois que vous avez exactement, attribué à la structure, vous pouvez également utiliser le JavaScriptSerializer classe de
System.Web.Script.Serialization
(depuis .NET 3.5)Quelque chose comme cela fonctionne:
Même plus simple que d'utiliser
DataContractSerializer
, même si je ne suis pas entièrement sûr de ses mises en garde. Je l'ai utilisé plusieurs fois sans aucun problème.Vous pouvez également ajouter des JavaScriptConverters, ce qui rend possible la mise en œuvre une jolie manière de dynamique parsing JSON avec une relative facilité.
Dynamique d'analyse est également très simple de cette façon: