使用 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());
我正在连接到 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());