Search code examples
c#jsonrestsharp

I'm not able to convert IRestresponse to a object. What am i missing?


I hope someone can help me out here, because I'm pretty stuck ;) I do not understand the error I'm getting:

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'OdosTest.OdosRecord' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.

Isn't my json respone (see in the bottom) okay?

I'm trying to deserialize my IRestResponse to a object, but with no luck. The classes should be finde, or where am I wrong?

Here is my code:

using System;
using RestSharp;
using Newtonsoft.Json;
using System.Collections.Generic;

namespace OdosTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new RestClient("https://triscan.odosolutions.com/api/v1/streams");
            client.Timeout = -1;
            var request = new RestRequest(Method.POST);
            request.AddHeader("Authorization", "Basic HIDDEN");
            IRestResponse response = client.Execute(request);
            var odosRecord = JsonConvert.DeserializeObject<OdosRecord>(response.Content);
            //Console.WriteLine(response.Content);
        }
    }


    public class OdosRecord
    {
        public int version { get; set; }
        public string id { get; set; }
        public int loggerImei { get; set; }
        public string vin { get; set; }
        public DateTime startTime { get; set; }
        public Signal[] signals { get; set; }
    }

    public class Signal
    {
        public string source { get; set; }
        public string name { get; set; }
        public string displayName { get; set; }
        public string number { get; set; }
        public string unit { get; set; }
        public bool isNumericComplement { get; set; }
        public Value[] values { get; set; }
    }

    public class Value
    {
        public DateTime timestamp { get; set; }
        public string value { get; set; }
    }


}

Here is the response I get:

[
    {
        "version": 1,
        "id": "0414bafa-39fe-4924-a1e3-f2180161f058",
        "loggerImei": 1000606,
        "vin": "WF0VXXGCEVFY08396",
        "startTime": "2020-07-03T12:59:04.000345Z",
        "signals": [
            {
                "source": "OBD",
                "name": "01_42_CMV",
                "displayName": "CMV",
                "number": "0142",
                "unit": "V",
                "isNumericComplement": false,
                "values": [
                    {
                        "timestamp": "2020-07-03T12:59:04Z",
                        "value": "13.78"
                    }
                ]
            },
            {
                "source": "OBD",
                "name": "DETECTED_PROTOCOL",
                "displayName": "DETECTED_PROTOCOL",
                "number": "N/A",
                "unit": "",
                "isNumericComplement": false,
                "values": [
                    {
                        "timestamp": "2020-07-03T12:59:04Z",
                        "value": "CAN"
                    }
                ]
            },
            {
                "source": "OBD",
                "name": "01_31_TravelledDistSinceCodeCleared",
                "displayName": "TravelledDistSinceCodeCleared",
                "number": "0131",
                "unit": "km",
                "isNumericComplement": false,
                "values": [
                    {
                        "timestamp": "2020-07-03T12:59:04Z",
                        "value": "53749"
                    }
                ]
            }
        ]
    }
]

Solution

  • Your json contains a List<OdosRecord>, so this should solve the issue:

    var odosRecord = JsonConvert.DeserializeObject<List<OdosRecord>>(response.Content);
    

    otherwise you cloud change your json to this (if you are able to change the contract):

    {
        "version": 1,
        "id": "0414bafa-39fe-4924-a1e3-f2180161f058",
        "loggerImei": 1000606,
        "vin": "WF0VXXGCEVFY08396",
        "startTime": "2020-07-03T12:59:04.000345Z",
        "signals": [
            {
                "source": "OBD",
                "name": "01_42_CMV",
                "displayName": "CMV",
                "number": "0142",
                "unit": "V",
                "isNumericComplement": false,
                "values": [
                    {
                        "timestamp": "2020-07-03T12:59:04Z",
                        "value": "13.78"
                    }
                ]
            },
            {
                "source": "OBD",
                "name": "DETECTED_PROTOCOL",
                "displayName": "DETECTED_PROTOCOL",
                "number": "N/A",
                "unit": "",
                "isNumericComplement": false,
                "values": [
                    {
                        "timestamp": "2020-07-03T12:59:04Z",
                        "value": "CAN"
                    }
                ]
            },
            {
                "source": "OBD",
                "name": "01_31_TravelledDistSinceCodeCleared",
                "displayName": "TravelledDistSinceCodeCleared",
                "number": "0131",
                "unit": "km",
                "isNumericComplement": false,
                "values": [
                    {
                        "timestamp": "2020-07-03T12:59:04Z",
                        "value": "53749"
                    }
                ]
            }
        ]
    }