2009-11-03 4 views
1

J'implémente une API générique repos dans WCF. J'ai besoin d'accéder à un objet générique désérialisé à partir de JSON (en tant que paramètre d'une opération POST). J'utilise le modèle de programmation brute pour permettre un contrôle précis du format de retour. Par exemple:WCF - Rest et paramètres de fonctionnement JSON

// Create 
[OperationContract(Name = "CreateJSON")] 
[WebInvoke(UriTemplate = "{endpointName}", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
Stream Create(Object input, String endpointName); 

Dans l'exemple ci-dessus l'objet générique est donnée par le paramètre « entrée » que je pense être la charge utile POST. Un appel analogue fonctionne correctement avec un point de terminaison ciblé pour xml, mais pas JSON.

Toute idée/assistance serait grandement appréciée. N'importe qui?

Répondre

1

Il y a un espace de noms System.Runtime.Serialization.Json

Pour sérialisation objet générique que vous pouvez faire comme ceci:

/// Object to Json 
let internal json<'t> (myObj:'t) = 
     use ms = new MemoryStream() 
     (new DataContractJsonSerializer(typeof<'t>)).WriteObject(ms, myObj) 
     Encoding.Default.GetString(ms.ToArray()) 

...

/// Object from Json 
let internal unjson<'t> (jsonString:string) : 't = 
     use ms = new MemoryStream(ASCIIEncoding.Default.GetBytes(jsonString)) 
     let obj = (new DataContractJsonSerializer(typeof<'t>)).ReadObject(ms) 
     obj :?> 't 

J'espère que F # est ok ... ;-)