仅当输入为数组时才将类调用为数组
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 - 仅当某个字段是唯一的时才将对象添加到对象数组中