2017-05-20 36 views
2

我有以下的JSON:如何构建一个类来反序列化Json进入?

{ 
    "BTC_BCN": { 
    "id": 7, 
    "last": "0.00000091", 
    "lowestAsk": "0.00000091", 
    "highestBid": "0.00000090", 
    "percentChange": "-0.16513761", 
    "baseVolume": "7448.24465884", 
    "quoteVolume": "8447512040.11460590", 
    "isFrozen": "0", 
    "high24hr": "0.00000115", 
    "low24hr": "0.00000071" 
}, 
"BTC_BELA": { 
    "id": 8, 
    "last": "0.00009098", 
    "lowestAsk": "0.00009178", 
    "highestBid": "0.00009101", 
    "percentChange": "0.02918552", 
    "baseVolume": "143.21212880", 
    "quoteVolume": "1621911.96303103", 
    "isFrozen": "0", 
    "high24hr": "0.00009196", 
    "low24hr": "0.00008681" 
}, 
"BTC_BLK": { 
    "id": 10, 
    "last": "0.00010199", 
    "lowestAsk": "0.00010262", 
    "highestBid": "0.00010204", 
    "percentChange": "0.03859470", 
    "baseVolume": "51.34937066", 
    "quoteVolume": "512481.76267599", 
    "isFrozen": "0", 
    "high24hr": "0.00010752", 
    "low24hr": "0.00009375" 
    } 

}

我想创建类似的结构如下:

public class QuoteDetail 
{ 
    public int id { get; set; } 
    public string last { get; set; } 
    public string lowestAsk { get; set; } 
    public string highestBid { get; set; } 
    public string percentChange { get; set; } 
    public string baseVolume { get; set; } 
    public string quoteVolume { get; set; } 
    public string isFrozen { get; set; } 
    public string high24hr { get; set; } 
    public string low24hr { get; set; } 
} 

public class Quote 
{ 
    public string SymbolName {get; set;} 
    public QuoteDetail QuoteDetail {get; set;} 
} 

我要的是行情的含BTC_BCN的符号名称列表例如,以及包含单个字段的报价详细信息。

我唯一能做的就是为每个符号名创建单独的类....不是我所需要的。

我正在使用RestSharp。

任何想法将不胜感激!

回答

3

鉴于JSON目前的结构,先将其转换为一个字典得到SymbolName为重点。从那里简单地在字典上执行一个linq投影,将key作为SymbolNamevalue作为QuoteDetails

var dictionary = JsonConvert.DeserializeObject<IDictionary<string, QuoteDetail>>(json); 

var quotes = dictionary 
    .Select(kvp => new Quote { SymbolName = kvp.Key, QuoteDetail = kvp.Value }) 
    .ToList(); 
+0

绝对完美!非常感谢! – shuri17

0

你已经差不多完成了所有工作。只要创建下面的类:

public class MyClass 
{ 
    public QuoteDetail BTC_BCN { get; set; } 
    public QuoteDetail BTC_BELA { get; set; } 
    public QuoteDetail BTC_BLK { get; set; } 
} 

而且使用Newtonsoft.Json NuGet包执行以下操作:

var result = JsonConvert.DeserializeObject<MyClass>(jsonString); 
+0

问题是,我不希望单独的字段为每个报价,我想报价名称作为字符串 – shuri17

+0

@ shuri17比你的JSON不正确,因为你有3个属性的匿名类而不是对象阵列 –

0

借助http://json2csharp.com从JSON创建类结构。既然你有相同的结构像BTC_BCN,BTC_BELA,BTC_BLK所有的类比仅使用与通用名称单班并与所需的名称创建一个属性例如

 public class ObjectData 
    { 
     public int id { get; set; } 
     public string last { get; set; } 
     public string lowestAsk { get; set; } 
     public string highestBid { get; set; } 
     public string percentChange { get; set; } 
     public string baseVolume { get; set; } 
     public string quoteVolume { get; set; } 
     public string isFrozen { get; set; } 
     public string high24hr { get; set; } 
     public string low24hr { get; set; } 
    } 


    public class RootObject 
    { 
     public ObjectData BTC_BCN { get; set; } 
     public ObjectData BTC_BELA { get; set; } 
     public ObjectData BTC_BLK { get; set; } 
    } 

比反序列化对象 RootObject rootObject = JsonConvert.DeserializeObject( jsonData);