仅当输入为数组时才将类调用为数组

Posted

技术标签:

【中文标题】仅当输入为数组时才将类调用为数组【英文标题】:Call class as array, only if input is array 【发布时间】:2021-11-03 03:19:31 【问题描述】:

我一直在创建算法,但我遇到了一个问题,让我停下了脚步。问题源于以下 API 响应:


    "topic": "trade.BTCUSDT",
    "data": [
        
            "symbol": "BTCUSDT",
            "tick_direction": "PlusTick",
            "price": 8098,
            "size": 328,
            "timestamp":"2020-03-30T02:21:06.000Z",
            "trade_time_ms":"1585534866418",
            "side":"Sell",
            "trade_id":"01e79e28-d1f4-59ac-b079-ca909606d91a"
        
    ]

这最初并没有造成任何问题,因为我在使用 Newtonsoft.Json 包进行反序列化时将数据称为数组,并采用第一个变量来缓解问题。我正在合并所有回复,并根据他们的回复主题对其进行排序。此响应是唯一使用方括号而不是大括号保存数据的响应。为了解决这个问题,我尝试编辑获取;放;命令如下,但出现堆栈溢出。

public Data[] data  get  if (_data != null)  return new[]  _data ;  else  return data;   set  if (value.Length == 1)  _data = value[0];  else  data = value;    

我的问题是,如果只设置了一个元素,是否可以将我的 get; set; 设置为将 Data 类分类为数组?

【问题讨论】:

你能展示另一种你能得到的json吗?很难理解有什么区别。你想在每种情况下得到什么? 【参考方案1】:

与其确定它是否是一个数组,不如直接创建你的类,它会自动序列化:

public class Datum

    public string symbol  get; set; 
    public string tick_direction  get; set; 
    public int price  get; set; 
    public int size  get; set; 
    public DateTime timestamp  get; set; 
    public string trade_time_ms  get; set; 
    public string side  get; set; 
    public string trade_id  get; set; 


public class Trade

    public string topic  get; set; 
    public List<Datum> data  get; set; 

【讨论】:

问题是其他反序列化使用单一版本的数据,所以整个程序都停止了。 您不能拥有可以是数组或单个实例的属性。您将需要两个属性或两个类。

以上是关于仅当输入为数组时才将类调用为数组的主要内容,如果未能解决你的问题,请参考以下文章

仅当数组列表尚不存在时才将其添加到数组列表中

MongoDB/Mongoose - 仅当某个字段是唯一的时才将对象添加到对象数组中

仅当 FormType 为 Create 时才将所有者设置为当前用户

javascript 将类数组对象转换为数组

将类数组转换为数组的方法

将类数组转换为数组的方法