在我的JSON文件中有一个数组(租金)。在这个数组中有一个varible,serial,可以是null或字符串。我循环通过我的数组(租金)如果串行变量为null我想继续循环,但是当它不是null我想保存它。但不知何故,它不像那样。当获得" serial"时,数组停止循环。
这是我的代码:
public static string sendRequest(string url, string method) {
try
{
// Set reqiued information for api
var httpWebRequest = (HttpWebRequest)WebRequest.Create(main_url + url);
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Headers.Add("Authorization", "Bearer " + Current_Access_Token);
httpWebRequest.Accept = "application/json;v=1";
httpWebRequest.Method = method;
// Get adn return responses
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
string respStr = new StreamReader(httpResponse.GetResponseStream()).ReadToEnd();
return respStr;
}
catch (Exception e)
{
MessageBox.Show("No responses");
}
return "";
}
public static void GetRentGames()
{
string resp = sendRequest("api.php/currentCustomer/rents", "GET");
JObject jObject = JObject.Parse(resp);
JArray Juser = (JArray)jObject["response"]["data"]["rents"];
//Console.WriteLine(resp);
foreach(var i in Juser)
{
var matchGame = ApiConnector.rentGame.Find(x => x.name == i["item"]["name"].ToString());
if(matchGame == null)
{
//name and id works just fine. it is the serial i can't get, and I think because the serial is null?
Console.WriteLine(i["serial"].ToString());
var Game = new RentGame(i["item"]["name"].ToString(), i["id"].ToString(), i["serial"].ToString());
rentGame.Add(Game);
Console.WriteLine("Add rent game " + Game.name);
}
}
}
JSON文件 - 第一个索引:
"response":{
"code":200,
"status":"success",
"data":{
"rents":[
{
"id":"34414",
"start_date":"2015-12-08",
"download_url":null,
"serial":null, ...
答案 0 :(得分:2)
要确定该值是否为null,请执行以下操作:
if(matchGame == null)
{
// Only do this if the serial is not null
if (i["serial"].Type != JTokenType.Null)
{
Console.WriteLine(i["serial"].ToString());
var Game = new RentGame(i["item"]["name"].ToString(), i["id"].ToString(), i["serial"].ToString());
rentGame.Add(Game);
Console.WriteLine("Add rent game " + Game.name);
}
难点在于JSON解析器不会将JSON中的空对象转换为C#中的null对象。 (为什么??!?)相反,它使它成为一个JToken对象,“Type”为“Null”。
你可以在调试器窗口中看到这样的: “值”列显示为{},这对我来说意义不大。 “类型”列显示它是JToken对象。什么是JToken?好吧,如果你扩展,你会发现它有很多属性:Next,Last,Parent,Path,...好的,这就解释了为什么它们没有使它成为真正的null。他们想跟踪所有这些其他事情。看起来您可以使用“HasValues”属性或“Type”属性来查看该事物是否为空。
答案 1 :(得分:1)
那么,
i["serial"].ToString()
如果我[" serial"] == null。,可能会抛出异常
最简单的解决方案是检查它是否为空,然后以某种方式处理它。