如何构建 class 以反序列化 Json 之后的内容?
How do I build a class to deserialize following Json into?
我有以下 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。
如有任何想法,我们将不胜感激!
你几乎完成了一切。只需创建以下 class:
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);
给定 JSON 的当前结构,首先将其转换为字典以获取 SymbolName
作为键。从那里简单地对字典执行 linq 投影,将 key
作为 SymbolName
并将 value
作为 QuoteDetails
.
var dictionary = JsonConvert.DeserializeObject<IDictionary<string, QuoteDetail>>(json);
var quotes = dictionary
.Select(kvp => new Quote { SymbolName = kvp.Key, QuoteDetail = kvp.Value })
.ToList();
在 http://json2csharp.com 的帮助下从 JSON 创建 class 结构。由于您对所有 class 具有相同的结构,例如 BTC_BCN、BTC_BELA、BTC_BLK,而不是仅使用具有通用名称的单个 class 并创建一个 属性例如需要名称
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);
我有以下 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。
如有任何想法,我们将不胜感激!
你几乎完成了一切。只需创建以下 class:
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);
给定 JSON 的当前结构,首先将其转换为字典以获取 SymbolName
作为键。从那里简单地对字典执行 linq 投影,将 key
作为 SymbolName
并将 value
作为 QuoteDetails
.
var dictionary = JsonConvert.DeserializeObject<IDictionary<string, QuoteDetail>>(json);
var quotes = dictionary
.Select(kvp => new Quote { SymbolName = kvp.Key, QuoteDetail = kvp.Value })
.ToList();
在 http://json2csharp.com 的帮助下从 JSON 创建 class 结构。由于您对所有 class 具有相同的结构,例如 BTC_BCN、BTC_BELA、BTC_BLK,而不是仅使用具有通用名称的单个 class 并创建一个 属性例如需要名称
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);