【发布时间】:2021-07-17 04:37:29
【问题描述】:
我有一个与这个问题here 非常相似的问题,除了我的应用程序是用 C# 编写的,不幸的是我不知道如何转换解决方案。我正在尝试反序列化如下所示的 JSON 结果:
"error":[],
"result":
{
"MANAEUR":[
[1619042400,"1.11200","1.13488","1.08341","1.10077","1.09896","58878.56534370",137],
[1619046000,"1.09767","1.12276","1.08490","1.11097","1.10456","25343.25910419",77],
],
"last":1619118000
}
我使用以下类:
public class ResponseBase
{
[JsonProperty(PropertyName = "error")]
public List<string> Error;
}
public class OHLCResponse : ResponseBase
{
[JsonProperty("result")]
public OHLCResult Result;
}
public class OHLCResult
{
[JsonProperty("pair_names")]
public Dictionary<string, OHLC[]> GetHistory;
[JsonProperty("last")]
public long Last;
}
....最后是它的胆量:
public class OHLC
{
public int Time;
public decimal Open;
public decimal High;
public decimal Low;
public decimal Close;
public decimal Vwap;
public decimal Volume;
public int Count;
}
我有一个标准的反序列化器类,它适用于我对同一 API 使用的所有其他调用,但我无法让这个调用工作。当我检索 OHLCResponse 对象时,我没有收到错误,并且始终填充“Result.Last”,但“Result.GetHistory”中预期的 OHLC 项数组始终为空/null。我知道数据已成功返回,因为我可以看到从 WebRequest 返回的变量中的数据,然后我将其传递给反序列化器函数,所以我猜这些类的布局一定是错误的。
谁能看出我做错了什么?
非常感谢,戴夫
【问题讨论】:
-
1) JSON 数据显示
MANAEUR,但您的模型中有pair_names。 2)MANAEUR是一个数组数组。不是数组字典。 3)你有OHLC作为一个对象,但它不是一个对象。这是一个数组;有几种方法可以使这项工作。您可以将MANAEUR属性更改为List<List<object>>,然后对OHLC对象执行.Select(),或者您可以使用自定义JsonConverter。 -
感谢您的 cmets 安迪。
-
我将“OHLCResult”中的属性标签注释掉,然后将属性更改为“public List
- > GetHistory;”,但这并没有改变结果。不过,我很感谢您的意见。我不明白你所说的“.Select()”是什么意思。
-
我假设您使用的是 Newtonsoft.Json?不是 System.Text.Json?
-
是的。我在模型类中声明了“使用 Newtonsoft.Json”。
标签: c# json rest serialization kraken.com