Json.Net Deserialize с инициализацией коллекции в конструкторе [duplicate]

2017 ответ: теперь вы можете делать то, что хотите, в каждом текущем браузере и узле

. Это довольно просто:

  • Вернуть обещание
  • Используйте 'await' , в котором JavaScript ожидает, что обещание будет разрешено в vlue (например, hTTP-ответ)
  • Добавьте 'async' для родительской функции

Вот рабочая версия вашего кода:

(async function(){

var response = await superagent.get('...')
console.log(response)

})()

ожидание поддерживается во всех текущих браузерах и узлах 8 [/ д2]

4
задан Brian Rogers 8 October 2014 в 19:28
поделиться

2 ответа

Причина, по которой это происходит, связана с комбинацией двух вещей:

  1. Конструкторы классов автоматически добавляют элементы по умолчанию в свои соответствующие списки. Json.Net называет те же самые конструкторы для создания экземпляров объекта во время десериализации.
  2. Поведение Json.Net по умолчанию заключается в повторном использовании (т.е. добавлении) существующих списков во время десериализации вместо их замены.

Чтобы исправить это, вы можете либо изменить свой код так, чтобы ваши конструкторы автоматически не добавляли элементы по умолчанию в свои списки, либо вы можете настроить Json.Net на замену списков при десериализации, а не на их повторное использование. Последнее можно сделать, изменив настройку ObjectCreationHandling на Replace, как показано ниже:

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ObjectCreationHandling = ObjectCreationHandling.Replace;

var database = JsonConvert.DeserializeObject<Database>(www.text, settings);
11
ответ дан Brian Rogers 27 August 2018 в 14:40
поделиться

Лучшим способом было бы настроить JSON.Net для замены значений по умолчанию на

JsonSerializerSettings   jsSettings =  new JsonSerializerSettings
{
  ObjectCreationHandling = ObjectCreationHandling.Replace,
};

JsonConvert.DeserializeObject<Army>(jsonString, jsSettings);
2
ответ дан Duminda L. A. 27 August 2018 в 14:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: