簡體   English   中英

JSON中的C#反序列化列表

[英]C# Deserialize list in JSON

假設我有這樣的JSON,如何為反序列化為類建模?

對於標准屬性(例如“虛擬”或普通數組)的類建模,我沒有問題,但是在這種情況下,我的“鏈接”數組是具有不同名稱(“附加項”,“條件”,“轉換”等的項的列表) )。

"dummy": "1",
 "links": {
            "addons": {
                "href": "/16071d9f-efec-4282-a42e-a495eea76ae0/offers/031C9E47-4802-4248-838E-778FB1D2CC05/addons",
                "method": "GET"
            },
            "conditions": {
                "href": "/16071d9f-efec-4282-a42e-a495eea76ae0/offers/031C9E47-4802-4248-838E-778FB1D2CC05/conditions",
                "method": "GET"
            },
            "conversions": {
                "href": "/16071d9f-efec-4282-a42e-a495eea76ae0/offers/031C9E47-4802-4248-838E-778FB1D2CC05/conversions",
                "method": "GET"
            },
            "list_prices": {
                "href": "/16071d9f-efec-4282-a42e-a495eea76ae0/offers/031C9E47-4802-4248-838E-778FB1D2CC05/list-prices",
                "method": "GET"
            },
            "mutual_exclusion": {
                "href": "/16071d9f-efec-4282-a42e-a495eea76ae0/offers/031C9E47-4802-4248-838E-778FB1D2CC05/mutually-exclusive-offers",
                "method": "GET"
            },
            "prerequisites": {
                "href": "/16071d9f-efec-4282-a42e-a495eea76ae0/offers/031C9E47-4802-4248-838E-778FB1D2CC05/prerequisites",
                "method": "GET"
            },
            "product": {
                "href": "/16071d9f-efec-4282-a42e-a495eea76ae0/products/f245ecc8-75af-4f8e-b61f-27d8114de5f3",
                "method": "GET"
            }
        },

假設您要查找的是LinkTypes集合,是否可以在JSON中使用類似以下內容的代碼,並在RootObject上執行Deserialize

可用的dotNet小提琴: https ://dotnetfiddle.net/ZWSlK4

在小提琴頁面的“控制台”窗格上簽出輸出。

public class Link
{
    public string Href { get; set; }
    public string Method { get; set; }
}

public class Links
{
    [JsonProperty("addons")]
    public Link Addons { get; set; }
    [JsonProperty("conditions")]
    public Link Conditions { get; set; }
    [JsonProperty("conversions")]
    public Link Conversions { get; set; }
    [JsonProperty("list_prices")]
    public Link ListPrices { get; set; }
    [JsonProperty("mutual_exclusion")]
    public Link MutualExclusion { get; set; }
    [JsonProperty("prerequisites")]
    public Link Prerequisites { get; set; }
    [JsonProperty("product")]
    public Link Product { get; set; }
}


public class RootObject
{
    public string dummy { get; set; }
    public Links links { get; set; }
}

然后像這樣執行Deserializer

var myDummyLinksList = JsonConvert.DeserializeObject<RootObject>(jsonText);

其中jsonText包含您在示例中列出的json字符串:

但是,如果links List的對象是動態的,並且內部對象的數量各不相同,並且您需要捕獲所有這些對象, 那么您可能必須編寫一個繼承自JsonConverter對象的自定義Converter 然后使用@mfarouk發布的答案

我分叉了dotNet Fiddle並實施了他的解決方案,它像動態案例的老板一樣工作!

工作的dotNet小提琴(動態案例): https : //dotnetfiddle.net/7bFcNM

希望這可以幫助!

links屬性可以解析為鍵,值字典,類可以像

public class JSONClass
{
    public string dummy { get; set; }
    public Dictionary<string, Link> links;

    public class Link
    {
        public string Href { get; set; }
        public string Method { get; set; }
    }
}

然后反序列化為

var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<JSONClass>(JSON);

暫無
暫無

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

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