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

C#解析含多条结果的JSON字符串问题求助

问题分析与解决方案

你的代码无法正确解析JSON并获取字段值,核心问题是数据类结构与JSON不匹配,加上错误的访问方式导致的,以下是具体修正步骤:

1. 修正字段名与JSON的匹配问题

JSON字段名和你定义的类属性名存在多处不一致,必须调整:

  • TicketData类里的datas要改成data(对应JSON根节点的data数组),如果想保留原属性名,可添加[JsonProperty("data")]标记
  • Data类里的requestor要改成requester(对应JSON里的requester字段)
  • Data类里的statuses(列表类型)要改成status(单个对象类型,对应JSON里的status对象)
  • Status类里的statusID改成statusId,parentID改成parentId,和JSON字段大小写保持一致

2. 修正数据类型不匹配问题

部分属性类型和JSON数据类型不符,会导致解析失败或值为null:

  • tags在JSON里是字符串数组,要把string改成List<string>
  • solvedTimeJSON里存在null值,decimal是值类型不能为null,要改成可空类型decimal?
  • type字段JSON里有null,可以改成string?(C# 8及以上版本支持)

3. 修正数据访问方式

summary是Data类的属性,TicketData里的data是列表集合,不能直接通过ticketData.summary访问,需要遍历列表或指定索引获取单个工单的字段。


修正后的完整数据类代码

using Newtonsoft.Json;

public class TicketData
{
    // 对应JSON根节点的data数组
    public List<Data> data { get; set; }
    
    // 可选:如果需要解析metadata,添加该属性和对应类
    public Metadata metadata { get; set; }
}

public class Data
{
    public string assignedAppUser { get; set; }
    public decimal createTime { get; set; }
    public string description { get; set; }
    public int id { get; set; }
    public string priority { get; set; }
    // 修正字段名:requestor -> requester
    public string requester { get; set; }
    public string severity { get; set; }
    // 改成可空decimal,支持JSON中的null值
    public decimal? solvedTime { get; set; }
    public string source { get; set; }
    // 修正类型与字段名:从List<Status>改为单个Status对象,字段名从statuses改为status
    public Status status { get; set; }
    public string summary { get; set; }
    // 改为字符串数组类型
    public List<string> tags { get; set; }
    public string ticketForm { get; set; }
    public string triggeredCondition { get; set; }
    // 改为可空string,支持JSON中的null值
    public string? type { get; set; }
}

public class Status
{
    // 修正大小写:statusID -> statusId
    public int statusId { get; set; }
    public string displayName { get; set; }
    // 修正大小写:parentID -> parentId
    public int parentId { get; set; }
}

// 可选:如果需要解析metadata,添加该类
public class Metadata
{
    public List<string> columns { get; set; }
    public List<SortByItem> sortBy { get; set; }
    public Dictionary<string, object> attributes { get; set; }
    public object filters { get; set; }
    public int lastCursorId { get; set; }
    public List<string> allColumns { get; set; }
    public List<string> columnNamesForExporting { get; set; }
    public List<string> allRequiredColumns { get; set; }
}

public class SortByItem
{
    public string field { get; set; }
    public string direction { get; set; }
}

正确的访问代码示例

解析后遍历工单列表,或获取指定索引的工单字段:

var ticketData = JsonConvert.DeserializeObject<TicketData>(tickets);

// 遍历所有工单输出summary
foreach (var ticket in ticketData.data)
{
    Console.WriteLine(ticket.summary);
}

// 获取第一个工单的summary(需判断列表非空)
if (ticketData.data != null && ticketData.data.Count > 0)
{
    Console.WriteLine(ticketData.data[0].summary);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:33:18