Подтвердить что ты не робот

Тип десериализации JSON не поддерживается для десериализации массива

Я прочитал два других сообщения об ошибке десериализации, но я никуда не ушел, поэтому я отправляю свой собственный вопрос.

У меня есть служба WCF, возвращающая JSON. При десериализации определенного типа он терпит неудачу.

Чтобы вы могли легко реплицировать ошибку, я жестко закодировал JSON ниже вместе с вызовом.

По существу, вы должны иметь возможность скопировать/вставить код ниже и увидеть, что он не работает.

Потребителю необходимо десериализовать это в рабочий объект. s.Deserialize завершается с сообщением об ошибке, отмеченным в заголовке.

ПРИМЕЧАНИЕ. Я понимаю, что в моем JSON есть косые черты. Это для удобства, чтобы избежать котировок. Спасибо.

Пример кода:

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

и класс тренировки:

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

Ответ 1

Проблема в том, что вы говорите сериализатору, что это всего лишь один Workout, а не список/массив из них. Это работает:

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

Это напрямую не связано с вашим вопросом, но если это вообще возможно, я рекомендую вам использовать Json.NET вместо JavaScriptSerializer.