簡體   English   中英

反序列化JSON以在C#中列出

[英]Deserialize JSON to list in C#

json- http://pastebin.com/Ss1YZsLK

我需要列出market_hash_name值。 到目前為止,我可以得到第一個價值:

using (WebClient webClient = new System.Net.WebClient()) {
    WebClient web = new WebClient();
    var json = web.DownloadString(">JSON LINK<");
    Desc data = JsonConvert.DeserializeObject<Desc>(json);

    Console.WriteLine(data.rgDescriptions.something.market_hash_name);
}

public class Desc {
    public Something rgDescriptions { get; set; }
}

public class Something {
    [JsonProperty("822948188_338584038")]
    public Name something { get; set; }
}

public class Name {
    public string market_hash_name { get; set; }
}

如果他們怎么辦?

由於rgDescriptions中沒有數組,而是一些隨機命名的外觀屬性,我想您需要一個自定義JsonConverter。 以下控制台應用程序似乎可以正常工作並正確顯示market_hash_names:

class Program
{
    static void Main(string[] args)
    {
        string json = File.ReadAllText("Sample.json");
        Desc result = JsonConvert.DeserializeObject<Desc>(json);
        result.rgDescriptions.ForEach(s => Console.WriteLine(s.market_hash_name));
        Console.ReadLine();
    }
}

public class Desc
{
    [JsonConverter(typeof(DescConverter))]
    public List<Something> rgDescriptions { get; set; }
}

public class Something
{
    public string appid { get; set; }
    public string classid { get; set; }
    public string market_hash_name { get; set; }
}

class DescConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(Something[]);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var descriptions = serializer.Deserialize<JObject>(reader);
        var result = new List<Something>();

        foreach (JProperty property in descriptions.Properties())
        {
            var something = property.Value.ToObject<Something>();
            result.Add(something);
        }

        return result;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

輸出:

Genuine Tactics Pin
Silver Operation Breakout Coin
Operation Phoenix Challenge Coin
Operation Bravo Challenge Coin

暫無
暫無

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

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