簡體   English   中英

C#JSON反序列化字典 <string, Dictionary<string, string> &gt;可選?

[英]C# JSON Deserialize Dictionary<string, Dictionary<string, string>> optional?

我的有效負載如下所示:

{
    "REFERENCE": "1",
    "FIELDS" : {
        "CUST" : "1234",
        "PROD" : "PR2134",
        "LIMIT" : "12345",
        "LINES" : {
              "LINE" : "01",
              "DATA" : "12"
        }
    }
}

我的對象僅具有以下內容:

public class TriggerRequest
{
    public string reference { get; set; }
    public Dictionary<string, string> fields { get; set; }

}

顯然,這不能處理LINES對象。 我如何創建一個反序列化入站有效負載的類,其中類似LINES的內容是動態的(即,我可以在有效負載中的任何位置發送任何Dictionary>並將其正確反序列化。當我需要創建自定義JsonConverter時,是否需要這樣做? ?

您可以使用dynamic代替。

public class TriggerRequest
{
    public string reference { get; set; }
    public dynamic fields { get; set; }
}

例如,這應該允許您直接在代碼中訪問(string)request.fields.lines.data

但是,如果您在編譯時不知道其中會有什么值,則可以將字段設置為JObject

public class TriggerRequest
{
    public string reference { get; set; }
    public JObject fields { get; set; }
}

這使您有機會編寫代碼來檢查其每個屬性中的數據類型並做出相應的響應。

最后,如果您確實知道期望fields具有的屬性,請為其創建一個單獨的類。

public class TriggerRequest
{
    public string reference { get; set; }
    public TriggerRequestFields fields { get; set; }
}

public class TriggerRequestFields
{
    public string cust {get;set;}
    ...
    public TriggerRequestLines lines {get;set;}
}

public class TriggerRequestLines
{
    public string line {get;set;}
    public string data {get;set;}
}

嘗試改變

public Dictionary<string, dynamic> fields { get; set; }

public Dictionary<string, object> fields { get; set; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM