繁体   English   中英

JSON.NET C#中的反序列化导致空对象

[英]JSON.NET Deserialization in C# results in empty object

我正在尝试使用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保持运行上面的代码后空的(动作= 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库使用其他属性/标志来更改此行为,但我不太清楚它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM