2015-11-14 5 views
0

ПРИМЕЧАНИЕ. Я добавляю эту запись вики сообщества, чтобы сэкономить кому-то потерю времени. Я только что прошел отладку этой проблемы.Json.net не загружает определенные свойства, принадлежащие объекту класса?

У меня есть объект класса с несколькими общедоступными свойствами. Я могу сериализовать его с помощью JSON.net. Но когда я загружаю текст JSON назад и десериализую его с помощью JsonConvert.DeserializeObject<>, некоторые из полей устанавливаются в NULL, когда у них определенно были действительные значения во время сериализации. Я проверил сериализованную строку JSON вручную, и я определенно вижу значения для свойств NULL в тексте. Почему это происходит?

ответ

2

По умолчанию Json.Net сериализует и десериализует только публичные члены класса. Если у вас есть публичные геттеры, но частные сеттеры для ваших свойств, то свойства будут сериализованы в JSON, но не будут десериализованы обратно в ваш класс.

Простой способ исправить это, чтобы сделать ваши сеттеры общедоступными, но, разумеется, это нарушает неизменность, предоставляемую частными сеттерами. Если вы хотите, чтобы ваши сеттеры были приватными, хотя они все еще могут их десериализовать, вы можете аннотировать свои свойства с помощью атрибутов [JsonProperty]. Это позволит десериализатору «видеть» их.

Вот короткая скрипка, чтобы продемонстрировать: https://dotnetfiddle.net/4nZdGJ

0

Хотя мне потребовалось некоторое время, чтобы выследить проблему, ответ был прост. Свойства объекта, которые всегда имели значения NULL при десериализации , имели частные сеттеры. Я сделал публикутелей публичными, и проблема исчезла.

+1

Если вы хотите сохранить сеттер частными, вы можете аннотировать свойство класса с '[JsonProperty]' атрибутами и что позволит десериализатору «видеть» их. –

+0

Спасибо Брайан. Это отличный совет. Если вы включили этот комментарий в ответ, я бы назвал его принятым ответом, потому что он лучше моего. –

+0

@BrianRogers Спасибо! Приобретен и принят. –

 Смежные вопросы

  • Нет связанных вопросов^_^