ImportedProductCodesContainer

ImportedProductCodesContainer

我正在尝试使用JSON.NET反序列化数据填充C#对象(ImportedProductCodesContainer)。

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仍为空(Action = 0,ProductListRaw = null)。您能帮我找出问题所在吗?

最佳答案

您的ImportedProductCodesContainer级别过多。它正在创建一个新的ImportedProductCodesContainer对象(来自模板化的反序列化器),然后尝试在其上设置一个名为ImportedProductCodesContainer的属性(来自JSON的顶层),该属性将是一个包含其他两个值的结构。如果仅反序列化内部部分

{"ProductListRaw":"1 23","Action":"Append"}

那么您应该获得所需的对象,或者可以使用ImportedProductCodesContainer属性创建新的结构
[JsonObject(MemberSerialization.OptOut)]
public class ImportedProductCodesContainerWrapper
{
    [JsonProperty]
    public ImportedProductCodesContainer ImportedProductCodesContainer { get; set; }
}

并使用该模板对反序列化器进行模板化,则原始JSON应该可以正常工作。

也可以通过该JSON库使用其他属性/标志来更改此行为,但我不太了解。

关于c# - C#中的JSON.NET反序列化导致空对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2972431/

10-09 02:04