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

C#反序列化JSON后如何获取所有Variant类实例的EAN值

问题根因

两个核心问题导致无法获取Variant的ean属性值:

  • 遍历逻辑错误:测试代码遍历的是手动新建的空List<Variant>集合,没有引用反序列化后得到的实际数据,自然无法拿到任何属性结果
  • 实体映射不匹配:自动生成的实体类将JSON中动态变化的数字商品ID硬编码为固定属性名,无法适配键名随数据变化的结构,反序列化阶段商品、变体数据就没有被正确映射到实体对象中
修正后的实体类定义

将原硬编码固定商品ID属性的Products类,替换为字典结构承接动态键值对,即可适配任意数字ID作为键的商品结构:

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

public class Root
{
    [JsonProperty("products")]
    public Dictionary<string, Product> Products { get; set; }
}

public class Product
{
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("variants")]
    public List<Variant> Variants { get; set; }
    // 其余和JSON结构匹配的属性可按需保留
}

public class Variant
{
    [JsonProperty("ean")]
    public string Ean { get; set; }
    // 其余和JSON结构匹配的属性可按需保留
}
正确遍历实现代码

不要手动初始化待遍历的变体集合,直接从反序列化完成的根实体中逐层读取数据即可:

using System;
using Newtonsoft.Json;

public class InventoryEanPrinter
{
    public static void PrintAllEans(string jsonContent)
    {
        var inventoryRoot = JsonConvert.DeserializeObject<Root>(jsonContent);
        if (inventoryRoot?.Products == null || inventoryRoot.Products.Count == 0)
        {
            Console.WriteLine("无有效商品库存数据");
            return;
        }

        foreach (var productItem in inventoryRoot.Products)
        {
            Console.WriteLine($"商品ID:{productItem.Key}");
            if (productItem.Value.Variants == null || productItem.Value.Variants.Count == 0)
            {
                continue;
            }
            foreach (var variant in productItem.Value.Variants)
            {
                Console.WriteLine($"对应变体EAN:{variant.Ean}");
            }
        }
    }
}
注意事项
  • 字典键类型固定使用string:JSON对象的键本质为字符串类型,即使内容为纯数字,用string承接可避免数值类型转换导致的反序列化失败
  • 若实体属性名和JSON键名完全一致(大小写、拼写完全匹配),可省略[JsonProperty]特性,显式添加特性可规避命名风格差异(如驼峰/下划线命名)导致的映射失败
  • 遍历前增加空值判断,避免JSON中部分商品无variants字段时触发空引用异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:45:41