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

使用Newtonsoft反序列化JSON时Data对应字段返回null问题

问题解决步骤

核心问题分析

你遇到的products字段反序列化后为null、无法生成AddInventoryProduct实例的问题,根源有三点:

  • JSON中的数组字段名为Data,但MyJson类中对应的属性是products,Newtonsoft.Json无法自动映射字段名不匹配的内容。
  • AddInventoryProduct类中使用了[JsonPropertyName]特性——这是System.Text.Json的专属特性,Newtonsoft.Json不识别,导致字段无法绑定。
  • AddInventoryProduct类定义末尾存在语法错误(多余的])。

修正后的代码

类定义修正

using Newtonsoft.Json; // 必须引入Newtonsoft.Json命名空间

public class MyJson
{
    public string Code { get; set; }
    public string Message { get; set; }
    // 用Newtonsoft的JsonProperty指定对应JSON中的Data字段
    [JsonProperty("Data")]
    public List<AddInventoryProduct> Products { get; set; }
}

public class AddInventoryProduct
{
    // 替换为Newtonsoft的JsonProperty特性
    [JsonProperty("inventory_id")]
    public int InventoryId { get; set; }

    [JsonProperty("text_fields")]
    public Dictionary<string, object> TextFields { get; set; }
}

Program.cs调整

注意访问属性时要和类中修正后的名称一致(遵循C#命名规范首字母大写):

async Task ProdAddWJson(string token)
{
    using var httpClient = new HttpClient();
    var baseLinkerClient = new BaseLinkerApiClient(httpClient, token)
    {
        ThrowExceptions = true
    };
    try
    {
        using (StreamReader r = new StreamReader("C:\\file.json"))
        {
            string json = r.ReadToEnd();
            Console.WriteLine(json);
            var inventory = JsonConvert.DeserializeObject<MyJson>(json);
            Console.WriteLine(inventory);
            // 对应类中的Products属性
            var products = inventory.Products;
            foreach (var product in products)
            {
                Console.WriteLine($"InventoryId: {product.InventoryId}, Name: {product.TextFields["name"]}");
            }
        }
    }
    catch (BaseLinkerException baseLinkerException)
    {
        Console.WriteLine($"Error! {baseLinkerException.ErrorCode} - {baseLinkerException.ErrorMessage}");
    }
}

效果验证

修正后,Newtonsoft.Json会正确将JSON中的Data数组映射到MyJson.Products属性,AddInventoryProduct的字段也能通过[JsonProperty]特性完成绑定,最终可以正常遍历和操作AddInventoryProduct实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:05:18