2015-08-24 50 views
-2

好的,請原諒我,如果我有術語錯誤。我正在嘗試執行以下操作。從URL 將JSON字符串序列化爲動態對象

    1. 獲取JSON字符串解析說字符串轉換成一個對象。

    常對我來說這將是非常容易的。通常JSON對象是靜態名稱。

    問題出現的地方是子json對象因人而異。如果您更改廣告資源,它們也會發生變化。

    現在,我需要能夠把這個變成一個對象,並對其進行查詢(不一定LINQ,但會拉數據)。有沒有人有任何信息?我試圖創建一個動態對象(如這裏所示Deserialize JSON into C# dynamic object?),但它不適用於我。

    這個鏈接是否確實適合我的目的,並且我是否正確實施它?

    這裏是什麼樣的JSON看起來像一個轉儲:http://chopapp.com/#ro46jfay

    謝謝你的幫助。

  • +2

    你指出一個有很多答案的問題,然後說「它對我不起作用」,但不顯示任何你試過的代碼。 – crashmstr

    回答

    4

    Newtonsoft Json.net支持從json創建動態對象。

    var obj = JsonConvert.DeserializeObject<dynamic>(json); 
    
    +0

    沒錯,但我還沒有成功地訪問過它的數據並獲取數據。 'code string name = item [「rgDescriptions [0]」]; string name = item [「rgDescriptions」];' –

    +0

    'item [「rgDescriptions [0]」];' - 這沒有意義。正確的方式將會像'obj [「rgDescriptions」] [0] [「name」]''。想象它像「字符串 - >對象」的字典,並像它的字典而不是一些神話般的json來導航它們。 –

    +0

    但是,這不讓我迭代。請看一下示例JSON。層次結構如下:ROOT - > rgDescriptios - > RandomName如何訪問所有隨機名稱及其子項? –

    2

    其實你在沒有動態數據,你的想法。所有這些ID用作屬性的名稱可以反序列化爲Dictionary<string,SomeObject>

    雖然你的JSON是一個比this question更復雜,同樣的想法可以很容易地使用。

    所以,你的模型可以如下:

    public class RGInventory 
    { 
        public string id { get; set; } 
        public string classid { get; set; } 
        public string instanceid { get; set; } 
        public string amount { get; set; } 
        public int pos { get; set; } 
    } 
    
    public class AppData 
    { 
        public string def_index { get; set; } 
        public int is_itemset_name { get; set; } 
    } 
    
    public class Description 
    { 
        public string type { get; set; } 
        public string value { get; set; } 
        public string color { get; set; } 
        public AppData app_data { get; set; } 
    } 
    
    public class Action 
    { 
        public string name { get; set; } 
        public string link { get; set; } 
    } 
    
    public class MarketAction 
    { 
        public string name { get; set; } 
        public string link { get; set; } 
    } 
    
    public class Tag 
    { 
        public string internal_name { get; set; } 
        public string name { get; set; } 
        public string category { get; set; } 
        public string category_name { get; set; } 
        public string color { get; set; } 
    } 
    
    public class RGDescription 
    { 
        public string appid { get; set; } 
        public string classid { get; set; } 
        public string instanceid { get; set; } 
        public string icon_url { get; set; } 
        public string icon_url_large { get; set; } 
        public string icon_drag_url { get; set; } 
        public string name { get; set; } 
        public string market_hash_name { get; set; } 
        public string market_name { get; set; } 
        public string name_color { get; set; } 
        public string background_color { get; set; } 
        public string type { get; set; } 
        public int tradable { get; set; } 
        public int marketable { get; set; } 
        public int commodity { get; set; } 
        public string market_tradable_restriction { get; set; } 
        public List<Description> descriptions { get; set; } 
        public List<Action> actions { get; set; } 
        public List<MarketAction> market_actions { get; set; } 
        public List<Tag> tags { get; set; } 
    } 
    
    public class RootObject 
    { 
        public bool success { get; set; } 
        public bool more { get; set; } 
        public bool more_start { get; set; } 
        public Dictionary<string, RGInventory> rgInventory { get; set; } 
        public Dictionary<string, RGDescription> rgDescriptions { get; set; } 
    } 
    

    現在你可以爲

    var obj = JsonConvert.DeserializeObject<RootObject>(json); 
    

    的層次結構如下所示反序列化(使用Json.Net):ROOT - > rgDescriptios - > RandomName我怎樣才能訪問所有的隨機名稱和他們的孩子?

    樣品LINQ可以寫成

    var appids = obj.rgDescriptions.Select(x => x.Value.appid).ToList(); 
    
    在類型安全的方式

    +0

    @DevinStokes雖然,我不明白你的沉默,這裏是我的其他答案http://stackoverflow.com/questions/32466119/c-sharp-get-json-value – Eser

    相關問題