2015-12-23 1 views
1

essaie de faire passer cet objet entre deux modules:Passe JSON, désérialisation échoué en raison d'backslashs

public class Transaction 
{ 
    public string ID { get; set; } 
    public string ErrorMessage { get; set; } 
    public int ErrorCode { get; set; } 
} 

sérialisation:

transaction.ErrorMessage = "temptemptemp"; 
transaction.ErrorCode = 123; 
transaction.ID = "0"; 
return Ok(JsonConvert.SerializeObject(transaction)); 

désérialisation:

using (WebClient webClient = new WebClient()) 
{ 
    string json = webClient.DownloadString(url); 
    Transaction transaction = JsonConvert.DeserializeObject<Transaction>(json); 
} 

dans la fenêtre de mise au point, Je vois les deux chaînes comme ceci:

  • après sérialisation - { "ID": "0", "ErrorMessage": "temptemptemp", "ErrorCode": 123}
  • avant désérialisation - "{\" ID \ ": \" 0 \ », \ "ErrorMessage \": \ "temptemptemp \", \ "ErrorCode \": 123} »

et je reçois l'exception suivante:

valeur de conversion d'erreur "{" ID ":" 0 "," ErrorMessage ":" temptemptemp "," ErrorCode ": 123}" pour taper "WebService.Transaction". Chemin d'accès '', ligne 1, position 75.

+0

Qu'est-ce que le 'Ok() 'méthode faire? –

+0

La fonction 'Ok()' renvoie un 'System.Web.Http.Results.OkNegotiatedContentResult' – toy4fun

+0

Ces barres obliques sont juste des caractères d'échappement, cela ne devrait pas affecter la conversion en JSON – AdamJeffers

Répondre

3

Vous doublez la sérialisation de votre objet transaction. D'abord, vous sérialisez à une chaîne JSON en appelant manuellement

var jsonString = JsonConvert.SerializeObject(transaction); 

Ensuite, vous passez à Ok<T>(T content) qui également sérialise sa valeur entrante:

return Ok(jsonString); 

Puisque la valeur entrante est une chaîne, Ok() échappe en tant que requis par le JSON standard pour la représentation d'un littéral de chaîne.

Au lieu de cela, laissez-asp.net sérialisation pour vous:

return Ok(transaction); 

Si vous voulez forcer JSON à retourner, vous pouvez utiliser Json<T>(T content):

return Json(transaction); 
+0

Je n'avais aucune idée que 'Ok()' sérialisait l'objet, merci. – toy4fun