277 messaggi dal 20 maggio 2001
Sto utilizzando Newtonsoft Json per deserializzare la risposta di una chiamata ad un'API di OpenWeather Map, ma ricevo questo errore quando eseguo la pagina:

Newtonsoft.Json.JsonReaderException: 'Unexpected character encountered while parsing value: S. Path '', line 0, position 0.'

Cosa sbaglio? Ecco il codice:

public partial class Default1 : System.Web.UI.Page
    {

        public class Main
        {
            public double temp { get; set; }
            public double temp_min { get; set; }
            public double temp_max { get; set; }
            public double pressure { get; set; }
            public double sea_level { get; set; }
            public double grnd_level { get; set; }
            public int humidity { get; set; }
            public double temp_kf { get; set; }
        }

        public class Weather
        {
            public int id { get; set; }
            public string main { get; set; }
            public string description { get; set; }
            public string icon { get; set; }
        }

        public class Clouds
        {
            public int all { get; set; }
        }

        public class Wind
        {
            public double speed { get; set; }
            public double deg { get; set; }
        }

        public class Snow
        {
            public double? __invalid_name__3h { get; set; }
        }

        public class Sys
        {
            public string pod { get; set; }
        }

        public class List
        {
            public int dt { get; set; }
            public Main main { get; set; }
            public List<Weather> weather { get; set; }
            public Clouds clouds { get; set; }
            public Wind wind { get; set; }
            public Snow snow { get; set; }
            public Sys sys { get; set; }
            public string dt_txt { get; set; }
        }

        public class Coord
        {
            public double lat { get; set; }
            public double lon { get; set; }
        }

        public class City
        {
            public int id { get; set; }
            public string name { get; set; }
            public Coord coord { get; set; }
            public string country { get; set; }
        }

        public class RootObject
        {
            public string cod { get; set; }
            public double message { get; set; }
            public int cnt { get; set; }
            public List<List> list { get; set; }
            public City city { get; set; }
        }

        public class Account
        {
            public string Email { get; set; }
            public bool Active { get; set; }
            public DateTime CreatedDate { get; set; }
            public IList<string> Roles { get; set; }
        }

        public class Deserializza
        {
            public string Active { get; set; }
            public string Email { get; set; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            Account account = new Account
            {
                Active = true,
                Email = "miaMail@tiscali.it"
            };

            string json = JsonConvert.SerializeObject(account, Formatting.Indented);




            Deserializza deserializza = JsonConvert.DeserializeObject<Deserializza>(json);
            


           WebRequest request = WebRequest.Create("https://samples.openweathermap.org/data/2.5/forecast?id=524901&appid=mioAppID");
            request.ContentType = "application/json";
            WebResponse response = request.GetResponse();
            string jsonRicevuto = response.ToString();
            Main main = JsonConvert.DeserializeObject<Main>(jsonRicevuto);
            double prova = main.pressure;

        }



    }


Sto cercando di familiarizzare con Json, quindi accetto ogni consiglio.
427 messaggi dal 13 novembre 2009
Dallerrore pare essere un problema non con la tua classe ma con la respinse che ricevi dal servizio. Io lo uso senza problemi. Come lo chiami? E cosa ricevi?
710 messaggi dal 13 novembre 2008
Contributi
ciao,
la risposta che ricevi dal servizio, chiamando ad esempio
https://samples.openweathermap.org/data/2.5/forecast?id=524901&appid=b1b15e88fa797225412429c1c50c122a1

puoi vederla nel browser ed è

cod  "200"
message  0.0036
cnt  40
list  
 0  
   dt  1485799200
   main  
     temp  261.45
     temp_min  259.086
     temp_max  261.45
     pressure  1023.48
     sea_level  1045.39
     grnd_level  1023.48
     humidity  79
     temp_kf  2.37
   weather  
     0  
      id  800
      main  "Clear"
      description  "clear sky"
      icon  "02n"
   clouds  
      ...


le proprietà principali, cod, message, cnt, list, le hai in RootObject, e quindi è quello che devi indicare nella deserializzazione, qualcosa del tipo

RootObject ro = JsonConvert.DeserializeObject<RootObject>(json);

da questo ricavi poi le altre proprietà, es.

var pressure = ro.list[0].main.pressure;

inoltre per verificare o generare le classi corrette in C#, dalla risposta json del servizio puoi usare
http://json2csharp.com/

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.