2014-05-12 10 views
12

Czytałem dwa inne posty dotyczące błędu deserializacji, ale nigdzie się nie dostałem, więc publikuję własne pytanie.Typ deserializacji JSON nie jest obsługiwany w przypadku deserializacji tablicy

Mam usługę WCF, która zwraca JSON. Po deserializacji określonego typu nie powiedzie się.

W celu umożliwienia łatwej replikacji błędu, utworzyłem kod JSON poniżej wraz z połączeniem.

Zasadniczo powinieneś być w stanie skopiować/wkleić poniższy kod i zobaczyć, że się nie udał.

Konsument musi przekształcić go w postać roboczą. s.Deserialize kończy się niepowodzeniem z komunikatem o błędzie wymienionym w tytule.

UWAGA: zdaję sobie sprawę, że w moim JSON-ie są cięcia. Te są dla wygody, aby uciec od cytatów. Dzięki.

Przykładowy kod:

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); 

i klasa Workout:

public class Workout 
{ 
    public int UserId { get; set; } 
    public List<string> WorkoutInfo { get; set; } 
} 

Odpowiedz

36

Problemem jest to, że mówisz serializatora, że ​​to tylko jeden Workout, a nie lista/tablica z nich . To działa:

var blah = s.Deserialize<List<Workout>>(jstr); 

To nie jest bezpośrednio związany z pytaniem, ale jeśli to w ogóle możliwe, polecam skorzystanie Json.NET zamiast JavaScriptSerializer.

+0

To okazało się głupim błędem w sposobie, w jaki skonfigurowałem odpowiedź z mojego serwera WCF. Zwracam listę z jakiegoś głupiego powodu. Pomogło mi to zobaczyć. Odpowiedź zostanie zaakceptowana po przekroczeniu limitu 1 min. Dzięki – tronious

Powiązane problemy