使用 C# 和 Jason.NET 检索特定 JSON 值作为变量

Retrieving Specific JSON value as variable using C# and Jason.NET

我正在连接到 REST API 以检索数据,返回的数据采用 JSON 格式,如下所示:

{
   "id": 123456,
   "summary": "Summary Value",
   "recordType": "ServiceTicket",
   "board": {
       "id": 22,
       "name": "Service Desk",
       "_info": {
           "board_href": "https://xxxxxxxxxxxxxxxxx"
       }
   },
   "status": {
       "id": 453,
       "name": "Assigned",
       "_info": {
           "status_href": "https://xxxxxxxxxxxxxxxxx"
       }
   },
   "company": {
       "id": 19381,
       "identifier": "CompanyName",
       "name": "Full Company Name",
       "_info": {
           "company_href": "https://xxxxxxxxxxxxxxxxx",
           "mobileGuid": "111111-222222-333333-444444-5555555"
       }
   },
   "site": {
       "id": 1088,
       "name": "Main",
       "_info": {
           "site_href": "https://xxxxxxxxxxxxxxxxx",
           "mobileGuid": "111111-222222-333333-444444-5555555"
       }
   },
   "siteName": "Main",
   "addressLine1": "Street 1",
   "addressLine2": "Street 2",
   "city": "London",
   .
   .
   .
   .

返回的数据包含 300 多行各种值和信息,但我只关心提取第一个 id 值 (123456)。我正在使用 Json .NET 来尝试执行此操作,并查看了许多示例代码,包括他们关于反序列化部分数据的文档,但是当我输出 id 的值时,我得到的只是 0.

我的publicclass:

        public class TicketInfo
        {
            public int id { get; set; }
        }

获取ID并在消息框中输出的代码:

                string json = response.Content; // The above JSON from a RestSharp query

                JObject ticketSearch = JObject.Parse(json);
                             
                IList<JToken> results = ticketSearch["id"].ToList();
                IList<SearchResult> searchResults = new List<SearchResult>();
                
                foreach (JToken result in results)
                {
                    SearchResult searchResult= result.ToObject<SearchResult>();
                    searchResults.Add(searchResult);
                }

                var ticketInfo = new TicketInfo();
                MessageBox.Show(ticketInfo.id.ToString());

最终您将忽略 JSON 并仅输出手动创建的实例的默认值:

var ticketInfo = new TicketInfo();
MessageBox.Show(ticketInfo.id.ToString());

永远是 0

看起来您的代码过度考虑了 JSON 反序列化过程。 (例如,代码中的 SearchResult 是什么?)如果您使用的是 Newtonsoft 的 JSON.Net,那么他们有 documentation 来帮助解决这个问题。您的整个过程可以简单地是:

var ticketInfo = JsonConvert.DeserializeObject<TicketInfo>(response.Content);
MessageBox.Show(ticketInfo.id.ToString());