【发布时间】:2021-08-19 13:55:51
【问题描述】:
我正在尝试反序列化这个字符串:
[[1627948800000 “33361.77000000”, “33881.50000000”, “32832.75000000”, “32953.11000000”, “513.87963000” 1627963199999 “17079364.00614616”,18285, “267.93047400”, “8902854.13595806”, “0”],[1627963200000 “32958.11000000”, “33082.10000000”, “32350.00000000”, “32887.55000000”, “473.31029500” 1627977599999 “15473902.88026993”,19157, “218.09445000”, “7129688.95708971”, “0”],[1627977600000 “32889.44000000”,” 33045.20000000","32650.48000000","32745.58000000","297.93607700",1627991999999,"9785835.12349423",14516,"151.51781200","4976292.204"]p>"
进入这个对象:
[JsonArray]
public class CandlestickData
{
[JsonProperty(Order = 1)]
public long OpenTime { get; set; }
[JsonProperty(Order = 2)]
public decimal Open { get; set; }
[JsonProperty(Order = 3)]
public decimal High { get; set; }
[JsonProperty(Order = 4)]
public decimal Low { get; set; }
[JsonProperty(Order = 5)]
public decimal Close { get; set; }
[JsonProperty(Order = 6)]
public decimal Volume { get; set; }
[JsonProperty(Order = 7)]
public long CloseTime { get; set; }
[JsonProperty(Order = 8)]
public decimal QuoteAssetVolume { get; set; }
[JsonProperty(Order = 9)]
public long NumberOfTrades { get; set; }
[JsonProperty(Order = 10)]
public decimal TakerBuyBaseAssetVolume { get; set; }
[JsonProperty(Order = 11)]
public decimal TakerBuyQuoteAssetVolume { get; set; }
[JsonProperty(Order = 12)]
public decimal Ignore { get; set; }
}
我尝试过使用JsonConvert.DeserializeObject<CandlestickData[]>(content);,其中content 是上面提到的字符串。
但是,我收到以下错误:
无法创建和填充列表类型 CandlestickData。
我尝试将小数更改为字符串,但这给了我同样的错误。反序列化此字符串的正确方法是什么?我无法控制创建的 json。
【问题讨论】:
-
不确定 JsonProperty 上的
Order=是否符合您的想法。它定义了在序列化过程中写入 props 的顺序;它不是将数组解包到不同道具中的设备 -
什么是反序列化这个字符串的正确方法? - 可能有很多,但是让你所有的道具 JsonIgnore,只需要一个 object[] 道具(不是那个props 应该返回数组但是..) 并且让每个 prop 采用不同的数组索引可能会起作用.. 除此之外,我认为您可能正在查看自定义的 deser 例程
-
public class RootBase { public List<List<object>> MyArray { get; set; } }=>RootBase myDeserializedClass = JsonConvert.DeserializeObject<RootBase>(content);否则遵循@CaiusJard 提到的内容。另外值得一提的是,您是否可以控制创建该 json,如果可以,请将其更改为key:value,以便您实际上拥有属性名称及其值;反序列化和获得你需要的东西将是轻而易举的事。 -
我无法控制创建的 json。这就是问题所在。当我尝试使用 CandlestickData 对象列表创建类 Rootbase 时,出现错误“无法创建和填充列表类型 RootBase。”。
-
使用
ObjectToArrayConverter<CandlestickData>,其中ObjectToArrayConverter<T>显示在this answer 到C#: Parsing a non-JSON array-only api response to a class object with x properties(重复)中,最初来自How to deserialize an array of values with a fixed schema to a strongly typed data class?。