Удаление десериализации JSON в объект с помощью Json.NET

Я немного играю с новым API StackOverflow . К сожалению, мой JSON немного слаб, поэтому мне нужна помощь.

Я пытаюсь десериализовать этот JSON пользователя:

{"user":{ "user_id": 1, "user_type": "moderator", "creation_date": 1217514151, "display_name": "Jeff Atwood", ... "accept_rate": 100 }} 

в объект, который я украсил атрибутами JsonProperty :

 [JsonObject(MemberSerialization.OptIn)] public class User { [JsonProperty("user_id", Required = Required.Always)] public virtual long UserId { get; set; } [JsonProperty("display_name", Required = Required.Always)] public virtual string Name { get; set; } ... } 

Я получаю следующее исключение:

Newtonsoft.Json.JsonSerializationException: Обязательное свойство user_id не найдено в JSON.

Это потому, что объект JSON является массивом? Если да, как я могу десериализовать его на один объект User?

Заранее спасибо!

Как сказал Alexandre Jasmin в комментариях к вашему вопросу, в результате JSON имеет обертку вокруг фактического объекта User который вы пытаетесь десериализовать.

Обходной class будет иметь class оболочки:

 public class UserResults { public User user { get; set; } } 

Тогда десериализация будет работать:

 using (var sr = new StringReader(json)) using (var jr = new JsonTextReader(sr)) { var js = new JsonSerializer(); var u = js.Deserialize(jr); Console.WriteLine(u.user.display_name); } 

На этой оболочке будут отображаться будущие свойства метаданных, например метка ответа, поэтому неплохо использовать ее!

Если вы не хотите создавать class-оболочку, вы также можете получить доступ к Пользователю следующим образом:

 String jsonString = "{\"user\":{\"user_id\": 1, \"user_type\": \"moderat..."; JToken root = JObject.Parse(jsonString); JToken user = root["user"]; User deserializedUser = JsonConvert.DeserializeObject(user.ToString()); 

См. Эту страницу в документе Json.NET для получения дополнительной информации.

Как и ответ @Alexandre Jasmin, вы можете использовать посредника JsonSerializer для преобразования вместо использования JsonConvert высокого уровня в .ToString() . Не знаю, если это более эффективно …

Рекомендации:

Пример:

 var root = JObject.Parse(jsonString); var serializer = new JsonSerializer(); var expectedUserObject = serializer.Deserialize(root["user"].CreateReader()); 
  • Deserialize JSON в динамический объект C #?
  • ShouldSerialize * () vs * Условный шаблон условной сериализации
  • Как сериализовать Java-примитивы с помощью Jersey REST
  • Невозможно десериализовать lambda
  • Джерси + jackson JSON формат даты формат - как изменить формат или использовать пользовательские JacksonJsonProvider
  • jackson не десериализует общий список, который он сериализовал
  • Использование jQuery для захвата содержимого из iframe CKEditor
  • Есть ли у .NET 4 встроенный сериализатор / десериализатор JSON?
  • Сериализация нулевого значения в JSON.NET
  • Стандартный способ сериализации JSON для строки запроса?
  • Как превратить объект C # в строку JSON в .NET?
  • Interesting Posts

    Как я могу написать приложение Java, которое может обновляться во время выполнения?

    Передача пользовательских объектов между действиями?

    Windows 7 – Как запустить скрипт при выключении, но не при выходе из системы

    Как подключить ярлык или пакетный файл к новым панелям задач Windows 7, 8 и 10 и меню «Пуск»?

    Как сделать видимым скрытый раздел

    Сериализовать объекты Entity Framework в JSON

    Создать экземпляр родового типа?

    Как распечатать имя метода и номер строки и условно отключить NSLog?

    Что такое выведенная защелка и как она создается, когда ей не хватает инструкции else в условии condition.can кто-нибудь объясняет кратко?

    Является ли разница в скорости, которую я получаю от установки моего SSD в режиме RAID, незначительна?

    Как определить внутреннее изменение html в div с угловым 2?

    Настройка пути к резервной копии Appender программно

    Как заставить VMWare Workstation использовать несколько окон для виртуальных машин вместо отображения с вкладками?

    Как узнать, совместим ли ЖК-дисплей с ноутбуком?

    Как смонтировать ISO через PowerShell / программно?

    Давайте будем гением компьютера.