如何处理JSON中为null的变量

时间:2015-12-08 13:39:10

标签: c# json wpf json.net

在我的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, ...

2 个答案:

答案 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”。

你可以在调试器窗口中看到这样的: Screen shot of Visual Studio 2015 watch window “值”列显示为{},这对我来说意义不大。 “类型”列显示它是JToken对象。什么是JToken?好吧,如果你扩展,你会发现它有很多属性:Next,Last,Parent,Path,...好的,这就解释了为什么它们没有使它成为真正的null。他们想跟踪所有这些其他事情。看起来您可以使用“HasValues”属性或“Type”属性来查看该事物是否为空。

答案 1 :(得分:1)

那么,

i["serial"].ToString() 
如果我[" serial"] == null。

可能会抛出异常

最简单的解决方案是检查它是否为空,然后以某种方式处理它。