JKorf / Bybit.Net

A C# .netstandard client library for the Bybit REST and Websocket V5 API focusing on clear usage and models
https://jkorf.github.io/Bybit.Net/
91 stars 62 forks source link

JsonSerializationException in GetLinearInverseSymbolsAsync() #207

Closed danielhw2 closed 2 months ago

danielhw2 commented 2 months ago

.Net 8.0 CryptoExchange.Net 7.3.3 Bybit.Net Ver 3.8.3

Exception when calling ClienteRest.V5Api.ExchangeData.GetLinearInverseSymbolsAsync(Bybit.Net.Enums.Category.Inverse).Result;.

I think the problem is with "minNotionalValue":""

It returns FALSE with ErrorResponse below:

{Error response: [DeserializeError] Deserialize JsonSerializationException: Error converting value {null} to type 'System.Decimal'. Path 'result.list[0].lotSizeFilter.minNotionalValue', line 1, position 568. {"retCode":0,"retMsg":"OK","result":{"category":"inverse","list":[{"symbol":"ADAUSD","contractType":"InversePerpetual","status":"Trading","baseCoin":"ADA","quoteCoin":"USD","launchTime":"1648080000000","deliveryTime":"0","deliveryFeeRate":"","priceScale":"4","leverageFilter":{"minLeverage":"1","maxLeverage":"50.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.0001","maxPrice":"199.9998","tickSize":"0.0001"},"lotSizeFilter":{"maxOrderQty":"150000","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"150000","maxMktOrderQty":"150000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"ADA","copyTrading":"none","upperFundingRate":"0.0075","lowerFundingRate":"-0.0075"},{"symbol":"BTCUSD","contractType":"InversePerpetual","status":"Trading","baseCoin":"BTC","quoteCoin":"USD","launchTime":"1542211200000","deliveryTime":"0","deliveryFeeRate":"","priceScale":"2","leverageFilter":{"minLeverage":"1","maxLeverage":"100.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.50","maxPrice":"999999.00","tickSize":"0.50"},"lotSizeFilter":{"maxOrderQty":"1943695","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"1943695","maxMktOrderQty":"1000000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"BTC","copyTrading":"none","upperFundingRate":"0.00375","lowerFundingRate":"-0.00375"},{"symbol":"BTCUSDM24","contractType":"InverseFutures","status":"Trading","baseCoin":"BTC","quoteCoin":"USD","launchTime":"1702627200000","deliveryTime":"1719561600000","deliveryFeeRate":"0.0005","priceScale":"2","leverageFilter":{"minLeverage":"1","maxLeverage":"100.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.50","maxPrice":"999999.00","tickSize":"0.50"},"lotSizeFilter":{"maxOrderQty":"1000000","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"1000000","maxMktOrderQty":"1000000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"BTC","copyTrading":"none","upperFundingRate":"0","lowerFundingRate":"0"},{"symbol":"BTCUSDU24","contractType":"InverseFutures","status":"Trading","baseCoin":"BTC","quoteCoin":"USD","launchTime":"1710489600000","deliveryTime":"1727424000000","deliveryFeeRate":"0.0005","priceScale":"2","leverageFilter":{"minLeverage":"1","maxLeverage":"100.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.50","maxPrice":"999999.00","tickSize":"0.50"},"lotSizeFilter":{"maxOrderQty":"5000000","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"5000000","maxMktOrderQty":"1000000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"BTC","copyTrading":"none","upperFundingRate":"0","lowerFundingRate":"0"},{"symbol":"DOTUSD","contractType":"InversePerpetual","status":"Trading","baseCoin":"DOT","quoteCoin":"USD","launchTime":"1634083200000","deliveryTime":"0","deliveryFeeRate":"","priceScale":"3","leverageFilter":{"minLeverage":"1","maxLeverage":"50.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.005","maxPrice":"9999.990","tickSize":"0.005"},"lotSizeFilter":{"maxOrderQty":"500000","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"500000","maxMktOrderQty":"500000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"DOT","copyTrading":"none","upperFundingRate":"0.00375","lowerFundingRate":"-0.00375"},{"symbol":"EOSUSD","contractType":"InversePerpetual","status":"Trading","baseCoin":"EOS","quoteCoin":"USD","launchTime":"1555927200000","deliveryTime":"0","deliveryFeeRate":"","priceScale":"3","leverageFilter":{"minLeverage":"1","maxLeverage":"50.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.001","maxPrice":"1999.998","tickSize":"0.001"},"lotSizeFilter":{"maxOrderQty":"1000000","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"1000000","maxMktOrderQty":"1000000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"EOS","copyTrading":"none","upperFundingRate":"0.00375","lowerFundingRate":"-0.00375"},{"symbol":"ETHUSD","contractType":"InversePerpetual","status":"Trading","baseCoin":"ETH","quoteCoin":"USD","launchTime":"1546300800000","deliveryTime":"0","deliveryFeeRate":"","priceScale":"2","leverageFilter":{"minLeverage":"1","maxLeverage":"100.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.05","maxPrice":"99999.90","tickSize":"0.05"},"lotSizeFilter":{"maxOrderQty":"1000000","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"1000000","maxMktOrderQty":"1000000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"ETH","copyTrading":"none","upperFundingRate":"0.00375","lowerFundingRate":"-0.00375"},{"symbol":"ETHUSDM24","contractType":"InverseFutures","status":"Trading","baseCoin":"ETH","quoteCoin":"USD","launchTime":"1702627200000","deliveryTime":"1719561600000","deliveryFeeRate":"0.0005","priceScale":"2","leverageFilter":{"minLeverage":"1","maxLeverage":"50.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.05","maxPrice":"99999.90","tickSize":"0.05"},"lotSizeFilter":{"maxOrderQty":"1000000","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"1000000","maxMktOrderQty":"1000000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"ETH","copyTrading":"none","upperFundingRate":"0","lowerFundingRate":"0"},{"symbol":"ETHUSDU24","contractType":"InverseFutures","status":"Trading","baseCoin":"ETH","quoteCoin":"USD","launchTime":"1710489600000","deliveryTime":"1727424000000","deliveryFeeRate":"0.0005","priceScale":"2","leverageFilter":{"minLeverage":"1","maxLeverage":"50.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.05","maxPrice":"99999.90","tickSize":"0.05"},"lotSizeFilter":{"maxOrderQty":"5000000","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"5000000","maxMktOrderQty":"1000000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"ETH","copyTrading":"none","upperFundingRate":"0","lowerFundingRate":"0"},{"symbol":"LTCUSD","contractType":"InversePerpetual","status":"Trading","baseCoin":"LTC","quoteCoin":"USD","launchTime":"1648684800000","deliveryTime":"0","deliveryFeeRate":"","priceScale":"2","leverageFilter":{"minLeverage":"1","maxLeverage":"50.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.01","maxPrice":"19999.98","tickSize":"0.01"},"lotSizeFilter":{"maxOrderQty":"150000","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"150000","maxMktOrderQty":"150000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"LTC","copyTrading":"none","upperFundingRate":"0.0075","lowerFundingRate":"-0.0075"},{"symbol":"MANAUSD","contractType":"InversePerpetual","status":"Trading","baseCoin":"MANA","quoteCoin":"USD","launchTime":"1648684800000","deliveryTime":"0","deliveryFeeRate":"","priceScale":"4","leverageFilter":{"minLeverage":"1","maxLeverage":"50.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.0005","maxPrice":"999.9990","tickSize":"0.0005"},"lotSizeFilter":{"maxOrderQty":"100000","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"100000","maxMktOrderQty":"100000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"MANA","copyTrading":"none","upperFundingRate":"0.0075","lowerFundingRate":"-0.0075"},{"symbol":"SOLUSD","contractType":"InversePerpetual","status":"Trading","baseCoin":"SOL","quoteCoin":"USD","launchTime":"1712714400000","deliveryTime":"0","deliveryFeeRate":"","priceScale":"2","leverageFilter":{"minLeverage":"1","maxLeverage":"50.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.01","maxPrice":"19999.98","tickSize":"0.01"},"lotSizeFilter":{"maxOrderQty":"125000","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"125000","maxMktOrderQty":"25000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"SOL","copyTrading":"none","upperFundingRate":"0.0075","lowerFundingRate":"-0.0075"},{"symbol":"XRPUSD","contractType":"InversePerpetual","status":"Trading","baseCoin":"XRP","quoteCoin":"USD","launchTime":"1555927080000","deliveryTime":"0","deliveryFeeRate":"","priceScale":"4","leverageFilter":{"minLeverage":"1","maxLeverage":"50.00","leverageStep":"0.01"},"priceFilter":{"minPrice":"0.0001","maxPrice":"199.9998","tickSize":"0.0001"},"lotSizeFilter":{"maxOrderQty":"1000000","minOrderQty":"1","qtyStep":"1","postOnlyMaxOrderQty":"1000000","maxMktOrderQty":"1000000","minNotionalValue":""},"unifiedMarginTrade":false,"fundingInterval":480,"settleCoin":"XRP","copyTrading":"none","upperFundingRate":"0.00375","lowerFundingRate":"-0.00375"}],"nextPageCursor":""},"retExtInfo":{},"time":1714136377870}, 8627 bytes received in 600ms}

JKorf commented 2 months ago

Thanks for the report, I've pushed a new fix for this in version 3.8.4