You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#读取URL中JSON文件时出现解析错误,寻求技术指导

Nobitex API JSON解析错误修正方案

尝试从https://api.nobitex.ir/v2/trades/BTCUSDT读取交易数据JSON时遇到解析错误,原代码存在反序列化目标类型不匹配的问题,以下是修正方案:

错误原因分析

  1. API返回的JSON根结构是单个对象(包含status和trades数组),但原代码错误地尝试反序列化为List<Example>和List<Trade>,导致解析失败
  2. Trade类的time字段定义为object,而API返回的是时间戳数字,类型匹配度差

修正后的代码

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;

public class Trade
{
    // API返回的是毫秒级时间戳数字,用long更适配,可额外转换为DateTime
    public long time { get; set; }
    public string price { get; set; }
    public string volume { get; set; }
    public string type { get; set; }

    // 可选:新增时间戳转本地DateTime的属性,方便直接使用
    public DateTime TradeTime => DateTimeOffset.FromUnixTimeMilliseconds(time).LocalDateTime;
}

public class TradeResponse
{
    public string status { get; set; }
    public IList<Trade> trades { get; set; }
}

class Program
{
    static async Task Main(string[] args)
    {
        string url = "https://api.nobitex.ir/v2/trades/BTCUSDT";

        using (var client = new HttpClient())
        {
            var response = await client.GetAsync(url);

            if (response.StatusCode != System.Net.HttpStatusCode.OK)
            {
                Console.WriteLine("请求错误: " + response.StatusCode);
                return;
            }

            string json = await response.Content.ReadAsStringAsync();

            // 直接反序列化为单个TradeResponse对象,匹配API返回的结构
            var tradeResponse = JsonConvert.DeserializeObject<TradeResponse>(json);

            Console.WriteLine("请求状态: " + tradeResponse.status);
            Console.WriteLine("交易数量: " + tradeResponse.trades.Count);
            Console.WriteLine("------------------------------");

            // 遍历每一笔交易数据并输出
            foreach (var trade in tradeResponse.trades)
            {
                Console.WriteLine($"时间戳: {trade.time}");
                Console.WriteLine($"本地时间: {trade.TradeTime}");
                Console.WriteLine($"价格: {trade.price}");
                Console.WriteLine($"成交量: {trade.volume}");
                Console.WriteLine($"交易类型: {trade.type}");
                Console.WriteLine("------------------------------");
            }
        }
    }
}

关键修正点

  • 将根反序列化目标从List<Example>改为TradeResponse(重命名类名更贴合语义),完全匹配API返回的单对象结构
  • 把Trade类的time字段类型从object改为long,对应API返回的毫秒级时间戳,同时新增转换为本地时间的属性提升易用性
  • 移除了错误的第二次反序列化操作,直接从TradeResponse的trades集合中遍历交易数据

内容的提问来源于stack exchange,提问作者محمد حسین مظفری

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:05:01