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

如何在C#中读取JSON数组并提取指定虚拟币的价格?

在C#中提取指定虚拟币价格的实现方案

这是个非常常见的JSON数据处理需求,在C#里我们可以借助成熟的序列化库来高效完成。下面我会给出两种主流的实现方式,分别是广泛使用的Newtonsoft.Json(Json.NET)和.NET Core之后自带的System.Text.Json,你可以根据自己的项目环境选择。

第一步:定义数据模型

首先我们需要创建一个实体类来映射JSON中的字段,这样反序列化后可以方便地通过对象属性访问数据。考虑到价格是数值类型,我们用decimal来存储(比double更适合处理货币类数据,避免精度丢失):

public class CryptoCurrency
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Symbol { get; set; }
    public string Rank { get; set; }
    [JsonPropertyName("price_usd")] // System.Text.Json需要该特性映射下划线字段;Json.NET可改用[JsonProperty("price_usd")]或开启驼峰命名自动映射
    public decimal PriceUsd { get; set; }
    // 其他不需要的字段可以直接省略,只保留业务需要的属性即可
}

方法一:使用Newtonsoft.Json(Json.NET)

这是.NET生态中使用最广泛的JSON处理库,兼容所有.NET版本。

1. 安装NuGet包

如果项目还没安装,在NuGet包管理器中搜索Newtonsoft.Json并安装,或者在Package Manager Console执行:

Install-Package Newtonsoft.Json

2. 完整实现代码

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        // 你的原始JSON字符串
        string json = @"[ { ""id"": ""bitcoin"", ""name"": ""Bitcoin"", ""symbol"": ""BTC"", ""rank"": ""1"", ""price_usd"": ""15235.5"", ""price_btc"": ""1.0"", ""24h_volume_usd"": ""17910600000.0"", ""market_cap_usd"": ""255647119350"", ""available_supply"": ""16779700.0"", ""total_supply"": ""16779700.0"", ""max_supply"": ""21000000.0"", ""percent_change_1h"": ""0.36"", ""percent_change_24h"": ""8.91"", ""percent_change_7d"": ""-3.41"", ""last_updated"": ""1514994260"" }, { ""id"": ""ripple"", ""name"": ""Ripple"", ""symbol"": ""XRP"", ""rank"": ""2"", ""price_usd"": ""2.88573"", ""price_btc"": ""0.00019146"", ""24h_volume_usd"": ""4799670000.0"", ""market_cap_usd"": ""111790712459"", ""available_supply"": ""38739144847.0"", ""total_supply"": ""99993093880.0"", ""max_supply"": ""100000000000"", ""percent_change_1h"": ""0.88"", ""percent_change_24h"": ""19.54"", ""percent_change_7d"": ""120.16"", ""last_updated"": ""1514994241"" } ]";

        // 反序列化JSON到实体列表
        List<CryptoCurrency> cryptoList = JsonConvert.DeserializeObject<List<CryptoCurrency>>(json);

        // 定义要查询的币种符号
        List<string> targetSymbols = new List<string> { "BTC", "XRP" };

        // 遍历查询并输出结果
        foreach (var symbol in targetSymbols)
        {
            var crypto = cryptoList.FirstOrDefault(c => c.Symbol.Equals(symbol, StringComparison.OrdinalIgnoreCase));
            if (crypto != null)
            {
                Console.WriteLine($"{crypto.Symbol} price: {crypto.PriceUsd}$");
            }
            else
            {
                Console.WriteLine($"{symbol} not found in the data");
            }
        }
    }
}

方法二:使用System.Text.Json(.NET Core 3.0+ / .NET 5+)

如果你的项目基于较新的.NET版本,System.Text.Json是官方自带的库,无需额外安装NuGet包,性能表现也很出色。

完整实现代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;

class Program
{
    static void Main()
    {
        // 你的原始JSON字符串
        string json = @"[ { ""id"": ""bitcoin"", ""name"": ""Bitcoin"", ""symbol"": ""BTC"", ""rank"": ""1"", ""price_usd"": ""15235.5"", ""price_btc"": ""1.0"", ""24h_volume_usd"": ""17910600000.0"", ""market_cap_usd"": ""255647119350"", ""available_supply"": ""16779700.0"", ""total_supply"": ""16779700.0"", ""max_supply"": ""21000000.0"", ""percent_change_1h"": ""0.36"", ""percent_change_24h"": ""8.91"", ""percent_change_7d"": ""-3.41"", ""last_updated"": ""1514994260"" }, { ""id"": ""ripple"", ""name"": ""Ripple"", ""symbol"": ""XRP"", ""rank"": ""2"", ""price_usd"": ""2.88573"", ""price_btc"": ""0.00019146"", ""24h_volume_usd"": ""4799670000.0"", ""market_cap_usd"": ""111790712459"", ""available_supply"": ""38739144847.0"", ""total_supply"": ""99993093880.0"", ""max_supply"": ""100000000000"", ""percent_change_1h"": ""0.88"", ""percent_change_24h"": ""19.54"", ""percent_change_7d"": ""120.16"", ""last_updated"": ""1514994241"" } ]";

        // 配置反序列化选项:忽略大小写(可选,根据你的需求调整)
        var options = new JsonSerializerOptions
        {
            PropertyNameCaseInsensitive = true
        };
        // 反序列化JSON到实体列表
        List<CryptoCurrency> cryptoList = JsonSerializer.Deserialize<List<CryptoCurrency>>(json, options);

        // 定义要查询的币种符号
        List<string> targetSymbols = new List<string> { "BTC", "XRP" };

        // 遍历查询并输出结果
        foreach (var symbol in targetSymbols)
        {
            var crypto = cryptoList.FirstOrDefault(c => c.Symbol.Equals(symbol, StringComparison.OrdinalIgnoreCase));
            if (crypto != null)
            {
                Console.WriteLine($"{crypto.Symbol} price: {crypto.PriceUsd}$");
            }
            else
            {
                Console.WriteLine($"{symbol} not found in the data");
            }
        }
    }
}

// 实体类(注意JsonPropertyName特性映射JSON中的下划线字段)
public class CryptoCurrency
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Symbol { get; set; }
    public string Rank { get; set; }
    [JsonPropertyName("price_usd")]
    public decimal PriceUsd { get; set; }
}

运行结果

两种方法运行后都会输出:

BTC price: 15235.5$
XRP price: 2.88573$

额外提示

  • 如果JSON中的price_usd可能为null或空字符串,建议把模型中的PriceUsd定义为decimal?(可空类型),避免反序列化报错。
  • 虽然可以用dynamic类型直接处理JSON,但静态类型的实体类更安全,能提供编译时检查,推荐使用。

内容的提问来源于stack exchange,提问作者Wassim Dernayka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:24:50