2017-08-31 6 views
0

Je tente de préparer une charge utile JSON à une méthode Post. Le serveur échoue incapable d'analyser mes données. ToString() méthode sur mes valeurs ne le convertirait pas correctement à Json, pouvez-vous s'il vous plaît suggérer la bonne façon de le faire.Préparation de l'objet Json pour la méthode HttpClient Post

var values = new Dictionary<string, string> 
       { 
        {"type", "a"}, {"card", "2"} 
       }; 
    var data = new StringContent(values.ToSttring(), Encoding.UTF8, "application/json"); 
    HttpClient client = new HttpClient(); 
    var response = client.PostAsync(myUrl, data).Result; 
    using (HttpContent content = response.content) 
    { 
     result = response.content.ReadAsStringAsync().Result; 
    } 
+1

Avez-vous regardé ce 'values.ToString () 'génère? –

+1

Regardez dans la classe 'JsonConvert'. – ragerory

+0

À quoi ressemble la signature de l'appel du serveur? – Fran

Répondre

2

Vous devez soit sérialisation manuellement l'objet en utilisant d'abord JsonConvert.SerializeObject

var values = new Dictionary<string, string> 
      { 
       {"type", "a"}, {"card", "2"} 
      }; 
var json = JsonConvert.SerializeObject(values); 
var data = new StringContent(json, Encoding.UTF8, "application/json"); 

//...code removed for brevity 

ou en fonction de votre plate-forme, utilisez la méthode d'extension PostAsJsonAsync sur HttpClient.

var values = new Dictionary<string, string> 
      { 
       {"type", "a"}, {"card", "2"} 
      }; 
var client = new HttpClient(); 
using(var response = client.PostAsJsonAsync(myUrl, values).Result) { 
    result = response.Content.ReadAsStringAsync().Result; 
} 
+0

Il convient de souligner que les deux nécessitent la bibliothèque tierce Json.Net (cette dernière étant une méthode d'extension fournie par cette bibliothèque). À compter de la publication, l'emplacement de téléchargement de Json.Net est le suivant: https://www.newtonsoft.com/json – Bilkokuya

1

values.ToString() ne sera pas créer une chaîne au format JSON valide.

Je vous recommande d'utiliser un analyseur JSON, tel que Json.Net ou LitJson pour convertir votre dictionnaire en une chaîne json valide. Ces bibliothèques sont capables de convertir des objets génériques en chaînes JSON valides en utilisant la réflexion, et seront plus rapides que la sérialisation manuelle au format JSON (bien que cela soit possible si nécessaire).

S'il vous plaît voir ici pour la définition de format de chaîne JSON (si vous souhaitez serialise manuellement les objets), et pour une liste des bibliothèques 3ème partie au fond: http://www.json.org/