#c# #arrays #json
Вопрос:
Я был в процессе создания алгоритма, но столкнулся с проблемой, которая остановила меня на полпути. Проблема связана со следующим ответом 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 и взял первую переменную, чтобы решить проблему. Я нахожусь в процессе объединения всех ответов и их сортировки в зависимости от темы ответа. Этот ответ является единственным ответом, в котором данные заключены в квадратные скобки, а не в фигурные скобки. Чтобы исправить это, я попытался отредактировать команду get; set; следующим образом, но вышло переполнение стека.
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;
класс в класс данных как массив, если задан только один элемент?
Комментарии:
1. Можете ли вы показать другой вид 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; }
}
Комментарии:
1. Проблема в том, что другие десериализации используют одну версию данных, поэтому вся программа останавливается.
2. У вас не может быть свойства, которое может быть массивом или одним экземпляром. Вам потребуются два свойства или два класса.