将 JSON 反序列化为 C# 类

问题描述

我正在调用一个返回 JSON 数据的 API,如下所示(该数组有大约 500 个项目):

[
    [
        1571702400000,"8197.28000000","8297.99000000","8000.00000000","8020.00000000","34651.82866300",1571788799999,"283535483.41051363",384699,"16767.03682400","137253195.95826291","0"
    ],[
        1614816000000,"50349.37000000","51773.88000000","49010.10000000","49653.85000000","25551.11905400",1614902399999,"1280981565.05072601",731056,"12197.45497900","611820740.21554123","0"
    ]
]

我正在尝试使用 JsonConvert.DeserializeObject(result) 解析这些数据。

我尝试过的两次尝试(见下文)都产生了以下错误:

错误信息

无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 '...+CandleSticks',因为该类型需要 JSON 对象(例如 {"name":"value"})才能正确反序列化.

要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如可以从 JSON 数组反序列化的列表。 JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组反序列化。 路径 '',第 1 行,位置 1。

尝试 #1:

public class CandleStick
{
    public List<List<object>> MyArray { get; set; } 
}
...
CandleStick myCandles = JsonConvert.DeserializeObject<CandleStick>(result);

尝试 #2:

public class CandleStick
{
    public long openTime { get; set; }
    public string open { get; set; }
    public string high { get; set; }
    public string low { get; set; }
    public string close { get; set; }
    public string volume { get; set; }
    public long closeTime { get; set; }
    public string quoteAssetVolume { get; set; }
    public int numberOfTrades { get; set; }
    public string takerBuyBaseAssetVolume { get; set; }
    public string takerBuyQuoteAssetVolume { get; set; }
    public string ignore { get; set; }
}
...
List<CandleStick> myCandles = (List<CandleStick>)JsonConvert.DeserializeObject(result,typeof(List<CandleStick>));

我应该如何将 JSON 数据正确解析为 C# 类?

编辑 - 更新

我现在可以反序列化“无用的”JSON,如下所示:

var arrays = JsonConvert.DeserializeObject<List<List<object>>>(result);
            IEnumerable<CandleStick> candles = from values in arrays
                               select new CandleStick
                               {
                                   openTime = Convert.ToInt64(values[0]),open = Convert.ToString(values[1]),high = Convert.ToString(values[2]),low = Convert.ToString(values[3]),close = Convert.ToString(values[4]),volume = Convert.ToString(values[5]),closeTime = Convert.ToInt64(values[6]),quoteAssetVolume = Convert.ToString(values[7]),numberOfTrades = Convert.ToInt32(values[8]),takerBuyBaseAssetVolume = Convert.ToString(values[9]),takerBuyQuoteAssetVolume = Convert.ToString(values[10]),ignore = Convert.ToString(values[11])
                               };

CandleStick cd = candles.ElementAt(0);

当我尝试引用蜡烛的元素时,我收到一条错误消息,指出预期的字符串格式不正确。

骗我!如果我更仔细地考虑它,错误消息是有道理的。我的数组没有正确转换其中一个元素。现在我可以按预期引用数据 - ElementAt(x) .ToList() 等

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...