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

如何反序列化Azure Consumption API返回的JSON对象?需对应什么类?

解决Azure Consumption API数据反序列化问题

一、定义匹配API返回结构的实体类

Azure Consumption API返回的usageDetails是嵌套结构,你需要定义以下几个C#类来对应JSON格式:

// 根响应对象
public class UsageDetailsResponse
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
    public string NextLink { get; set; } // 分页用,非空说明还有更多数据
    public List<UsageDetail> Value { get; set; } // 核心使用数据列表
}

// 单条使用记录
public class UsageDetail
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
    public UsageDetailProperties Properties { get; set; } // 记录的详细属性
}

// 使用记录的核心属性(可根据实际返回字段扩展)
public class UsageDetailProperties
{
    public string SubscriptionId { get; set; }
    public string SubscriptionName { get; set; }
    public DateTime UsageStart { get; set; }
    public DateTime UsageEnd { get; set; }
    public string MeterName { get; set; } // 计量项名称
    public decimal Quantity { get; set; } // 使用量
    public decimal Cost { get; set; } // 费用
    public string Currency { get; set; }
    public string ResourceGroup { get; set; } // 资源组名称(按需添加)
}

二、反序列化并处理数据

可以用两种常用的序列化库来实现,选一种你项目里在用的就行:

方式1:用Newtonsoft.Json(需先安装NuGet包)

using Newtonsoft.Json;

// 把JSON字符串反序列化为对象
var usageData = JsonConvert.DeserializeObject<UsageDetailsResponse>(data);

// 遍历数据并计算示例
if (usageData?.Value != null)
{
    // 计算总费用
    decimal totalCost = usageData.Value.Sum(item => item.Properties.Cost);
    // 统计特定计量项的总使用量
    var storageUsage = usageData.Value
        .Where(item => item.Properties.MeterName.Contains("Storage"))
        .Sum(item => item.Properties.Quantity);
    
    Console.WriteLine($"周期总费用:{totalCost:C}");
    Console.WriteLine($"存储类资源总使用量:{storageUsage}");
}

方式2:用System.Text.Json(.NET Core 3.0+内置)

using System.Text.Json;

// 开启大小写不敏感匹配,避免字段名大小写问题
var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
var usageData = JsonSerializer.Deserialize<UsageDetailsResponse>(data, options);

// 遍历计算逻辑和上面一致
if (usageData?.Value != null)
{
    decimal totalCost = usageData.Value.Sum(item => item.Properties.Cost);
    Console.WriteLine($"周期总费用:{totalCost:C}");
}

三、额外提示

  • 如果API返回的字段比示例多,直接在UsageDetailProperties类里添加对应属性就行,字段名要和JSON返回的一致,或者用特性映射(比如[JsonProperty("resourceGroupName")])。
  • 如果NextLink不为空,说明数据没取完,需要循环调用该链接获取剩余数据,直到NextLink为空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:15:08