如何为JSON生成类c#

时间:2017-06-17 09:47:17

标签: c# json json.net

我现在正在使用Newtonsoft.Json for JSON。也许有人知道我应该为这个json请求使用什么类?

{
"status": 1,
"response": {
    "AK-47 | Aquamarine Revenge (Battle-Scarred)": {
        "price": 929,
        "quantity": 46
    },
    "AK-47 | Aquamarine Revenge (Factory New)": {
        "price": 2716,
        "quantity": 100
    },
    "AK-47 | Aquamarine Revenge (Field-Tested)": {
        "price": 1349,
        "quantity": 345
    },
    "AK-47 | Aquamarine Revenge (Minimal Wear)": {
        "price": 1919,
        "quantity": 143
    },
    "AK-47 | Aquamarine Revenge (Well-Worn)": {
        "price": 1135,
        "quantity": 204
    },
    "AK-47 | Black Laminate (Factory New)": {
        "price": 6999,
        "quantity": 14
    },
    "AK-47 | Black Laminate (Field-Tested)": {
        "price": 671,
        "quantity": 83
 }
},
    "time": 1497616580
}

2 个答案:

答案 0 :(得分:2)

使用此类

class StockResponse
{
    public int status { get; set; }
    public int time { get; set; }
    public Dictionary<string,StockData> response { get; set; }
}

class StockData
{
    public int price { get; set; }
    public int quantity { get; set; }
}

并使用

反序列化它
var response = JsonConvert.DeserializeObject<StockResponse>( jsonResponse );

答案 1 :(得分:1)

如果所有AK ......类都来自同一个,你应该能够使用它(即使不推荐,请参阅下面的编辑):

public class Weapon
{
    public int price { get; set; }
    public int quantity { get; set; }
}

public class AK47AquamarineRevengeFieldTested : Weapon
{
}

public class AK47AquamarineRevengeMinimalWear : Weapon
{
}

// etc., do this for each AK... class

public class Response
{
    public Weapon AK47AquamarineRevengeFieldTested { get; set; }
    public Weapon AK47AquamarineRevengeMinimalWar { get; set; }

    // Add all those weapons here, or use (you need a different JSON result though)
    public IEnumerable<Weapon> Weapons { get ; set; }
}

public class Example
{
    public int status { get; set; }
    public Response response { get; set; }
    public int time { get; set; }
}

编辑: 一般来说,如果你可以重新设计你的代码,你很可能会这样做:

public class Weapon
{
    public string name { get; set; }
    public int price { get; set; }
    public int quantity { get; set; }
}

然后你可以像这样使用它:

IEnumerable<Weapon> Weapons = new List<Weapon> 
{
   new Weapon { name = "AK47AquamarineRevengeFieldTestet", price = .., quantity = ..},
   new Weapon { name = "AK47AquamarineRevengeMinimalWar", price = .., quantity = ..}, ...
}

所以你不会为每支步枪创造不同的类,而只是使用一个步枪类(在这种情况下为Weapon)并传递使用步枪名称作为属性。