Я пытаюсь заполнить объект C# (ImportedProductCodesContainer) с данными с помощью десериализации JSON.NET.
ImportedProductCodesContainer.cs:
using Newtonsoft.Json;
[JsonObject(MemberSerialization.OptOut)]
public class ImportedProductCodesContainer
{
public ImportedProductCodesContainer()
{
}
[JsonProperty]
public ActionType Action { get; set; }
[JsonProperty]
public string ProductListRaw { get; set; }
public enum ActionType {Append=1, Replace};
}
Строка JSON:
{"ImportedProductCodesContainer":{"ProductListRaw":"1 23","Action":"Append"}}
Код C#:
var serializer = new JsonSerializer();
var importedProductCodesContainer =
JsonConvert.DeserializeObject<ImportedProductCodesContainer>(argument);
Проблема состоит в том, что importedProductCodesContainer остается пустым после выполнения кода выше (Действие = 0, ProductListRaw = пустой указатель). Можно ли помочь мне выяснить что случилось?
У вас слишком много уровней ImportedProductCodesContainer
. Он создает новый объект ImportedProductCodesContainer
(из шаблонного десериализатора), а затем пытается установить для него свойство под названием ImportedProductCodesContainer
(из верхнего уровня вашего JSON), которое будет структурой, содержащей два других значения. Если вы десериализуете только внутреннюю часть
{"ProductListRaw":"1 23","Action":"Append"}
, тогда вы должны получить объект, который ожидаете, или вы можете создать новую структуру со свойством ImportedProductCodesContainer
[JsonObject(MemberSerialization.OptOut)]
public class ImportedProductCodesContainerWrapper
{
[JsonProperty]
public ImportedProductCodesContainer ImportedProductCodesContainer { get; set; }
}
и шаблон вашего десериализатора с этим, тогда ваш исходный JSON должен работать.
Также можно изменить это поведение, используя другие атрибуты / флаги с этой библиотекой JSON, но я не знаю этого достаточно хорошо, чтобы сказать.