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

JSON中ID属性为对象形式时,如何用C# Newtonsoft.NET创建POCO?

解决Json.NET解析动态ID键的JSON结构问题

嘿,我完全懂你现在的困惑——这种以动态数字ID作为对象键的JSON结构,刚开始用Json.NET的时候确实容易卡壳。别慌,咱们用字典(Dictionary)就能完美搞定它!

问题核心

你的JSON里events字段不是常规的数组,而是一个键为动态ID(比如"119327")、值为事件对象的键值对集合。这种结构没法直接用List<Event>来解析,得用Dictionary<string, Event>来匹配键值对的形式。

步骤1:定义对应实体类

先创建两个类:一个对应单个事件的Event类,一个包含事件集合的根类EventRoot:

public class Event
{
    // 属性名可以直接和JSON键保持一致,或者用JsonProperty做映射
    public string name { get; set; }
    public string start { get; set; }
    public string end { get; set; }
    public string details { get; set; }
    [JsonProperty("image_url")] // 适配JSON里的下划线命名
    public string ImageUrl { get; set; }
}

public class EventRoot
{
    [JsonProperty("events")]
    public Dictionary<string, Event> Events { get; set; }
}

小提示:如果你的C#代码习惯用驼峰命名(比如ImageUrl),而JSON里是下划线命名(image_url),一定要用[JsonProperty]属性做映射,不然解析会失败。

步骤2:解析JSON并使用

用JsonConvert.DeserializeObject方法解析后,就能通过字典的Key拿到事件ID,Value拿到事件详情:

// 假设你的JSON字符串存在json变量中
var eventData = JsonConvert.DeserializeObject<EventRoot>(json);

// 遍历所有事件
foreach (var eventEntry in eventData.Events)
{
    string eventId = eventEntry.Key; // 这里就是你要的119327、119217这类ID
    Event eventDetails = eventEntry.Value;
    
    // 输出示例
    Console.WriteLine($"事件ID:{eventId}");
    Console.WriteLine($"名称:{eventDetails.name}");
    Console.WriteLine($"开始时间戳:{eventDetails.start}");
}

额外优化:处理时间戳

如果start和end是Unix时间戳,你可以把它们改成long类型,再转成DateTime方便使用:

public class Event
{
    public string name { get; set; }
    public long start { get; set; }
    public long end { get; set; }
    public string details { get; set; }
    [JsonProperty("image_url")]
    public string ImageUrl { get; set; }

    // 新增转换后的DateTime属性
    public DateTime StartTime => DateTimeOffset.FromUnixTimeMilliseconds(start).LocalDateTime;
    public DateTime EndTime => DateTimeOffset.FromUnixTimeMilliseconds(end).LocalDateTime;
}

小提醒

你的示例JSON里有个语法错误:"details": "description"后面少了逗号,记得修正后再解析,不然会抛出JSON格式异常哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:25:53