簡體   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