Я пытаюсь десериализовать ответ JSON от конечной точки https://api.huobi.pro/market/history/trade?symbol=btcusdt
. Однако ответ включает очень большое число, которое превышает возможности ulong в C#, и я получаю исключения при десериализации с помощью System.Text.Json.JsonSerializer.Deserialize
(также с Newtonsoft.Json
). Проблемное поле — это самое внутреннее поле «id» ответа. Я пытался использовать BigNumber
в своей модели данных, но не помогло. Как я могу десериализовать этот объект?
Структура ответа:
{"ch":"market.btcusdt.trade.detail","status":"ok","ts":1675717627951,"data":[{"id":161853359895,"ts":1675717624799,"data":[{"id":161853359895718430859199824,"ts":1675717624799,"trade-id":102753924495,"amount":0.01998,"price":22983.98,"direction":"buy"}]}]}
Возможно это может подтолкнуть вас в правильном направлении? В нем говорится о работе с другим большим классом int, но я думаю, что вы могли бы повторно использовать концепцию из него.
@David Дэвид, я пробовал это, но он говорит: «Невозможно получить значение типа токена «Число» в виде строки». когда я меняю тип идентификатора поля на строку.
@smgtkn System.Text.Json захлебнется при сериализации значения в строку, но Json.Net отлично справляется с этим. Json.Net также выполняет сериализацию в BigInteger. Возможно, вам нужно уточнить свой вопрос, чтобы настроить только ОДИН сериализатор.
просто используйте свойство BigInteger. Этот код был протестирован и работает правильно
using Newtonsoft.Json;
using System.Numerics;
Data data = JsonConvert.DeserializeObject<Data>(json);
public class Datum
{
public BigInteger id { get; set; }
public long ts { get; set; }
public List<Datum> data { get; set; }
[JsonProperty("trade-id")]
public long tradeid { get; set; }
public double amount { get; set; }
public double price { get; set; }
public string direction { get; set; }
}
public class Data
{
public string ch { get; set; }
public string status { get; set; }
public long ts { get; set; }
public List<Datum> data { get; set; }
}
Это не удается по какой-то причине. Сообщение об исключении: «Значение JSON не может быть преобразовано в System.Numerics.BigInteger. Путь: $.data[0].data[0].id» @Serge
@smgtkn Я использую Newtonsoft.Json и настоятельно рекомендую его вам вместо Text.Json.
дестерилизовать его как строку, а затем преобразовать :)
Есть ли причина, по которой вы не можете десериализовать его в строку?