I am trying to populate a C# object (ImportedProductCodesContainer) with data using JSON.NET deserialization.
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 string:
{"ImportedProductCodesContainer":{"ProductListRaw":"1 23","Action":"Append"}}
C# Code:
var serializer = new JsonSerializer();
var importedProductCodesContainer =
JsonConvert.DeserializeObject<ImportedProductCodesContainer>(argument);
The problem is that importedProductCodesContainer remains empty after running the code above (Action = 0, ProductListRaw = null). Can you please help me figure out what's wrong?
You have one too many levels of ImportedProductCodesContainer
. It's creating a new ImportedProductCodesContainer
object (from the templated deserializer) and then attempting to set a property on it called ImportedProductCodesContainer
(from the top level of your JSON) which would be a structure containing the other two values. If you deserialize the inner part only
{"ProductListRaw":"1 23","Action":"Append"}
then you should get the object you're expecting, or you can create a new struct with an ImportedProductCodesContainer property
[JsonObject(MemberSerialization.OptOut)]
public class ImportedProductCodesContainerWrapper
{
[JsonProperty]
public ImportedProductCodesContainer ImportedProductCodesContainer { get; set; }
}
and template your deserializer with that then your original JSON should work.
It may also be possible to change this behaviour using other attributes / flags with that JSON library but I don't know it well enough to say.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With