J'ai lu deux autres articles concernant l'erreur de désérialisation, mais je ne suis arrivé nulle part, donc je pose ma propre question.
J'ai un service WCF qui retourne JSON. Lors de la désérialisation d'un type spécifique, il échoue.
Afin de vous permettre de reproduire facilement l'erreur, j'ai codé en dur le JSON ci-dessous avec l'appel.
Essentiellement, vous devriez pouvoir copier/coller le code ci-dessous et le voir échouer.
Le consommateur doit désérialiser cela en un objet de travail. s. Deserialize échoue avec le message d'erreur noté dans le titre.
REMARQUE: je me rends compte qu'il y a des barres obliques dans mon JSON. Ceux-ci sont là pour plus de commodité afin d'échapper aux citations. Merci.
Exemple de code:
var s = new JavaScriptSerializer();
var jstr =
"[{\"UserId\":1,\"WorkoutId\":1,\"WorkoutInfo\":[\"Step 1\",\"Step 2\"]},{\"UserId\":2,\"WorkoutId\":2,\"WorkoutInfo\":[\"Step 1a\",\"Step 2a\"]},{\"UserId\":5,\"WorkoutId\":0,\"WorkoutInfo\":[\"new work1\",\"new work 1\",\"new work 1\"]}]";
Workout blah = s.Deserialize<Workout>(jstr);
var response = ServicePOST<Workout>("AddUserWorkout", workout);
et séance d'entraînement:
public class Workout
{
public int UserId { get; set; }
public List<string> WorkoutInfo { get; set; }
}
Le problème est que vous dites au sérialiseur qu'il ne s'agit que d'un seul Workout
, pas d'une liste/d'un tableau d'entre eux. Cela marche:
var blah = s.Deserialize<List<Workout>>(jstr);
Ce n'est pas directement lié à votre question, mais si possible, je vous recommande d'utiliser Json.NET au lieu de JavaScriptSerializer
.