252 messaggi dal 03 dicembre 2001
www.fuossbook.it
Ciao a tutti,
per studio sto provando ad eseguire il login a facebook.
Oltre ad aver visto il sistema che rilascia visual studio di default sto provando con questo esempio trovato si msdn
https://blogs.msdn.microsoft.com/nickpinheiro/2015/02/28/facebook-login-with-asp-net-web-forms/

Tutto mi funziona correttamente, ma vorrei apportare delle modifiche ovvero vorrei capire alcune cose, in particolare ora mi sto soffermando sul Deserialize (anche se non c'entra nulla con il login)

Questo è il codice che sto usando
 Uri targetUserUri = new Uri("https://graph.facebook.com/me?fields=id,name,gender,link,first_name,last_name&access_token=" + accessToken);

            HttpWebRequest user = (HttpWebRequest)HttpWebRequest.Create(targetUserUri);

            // Read the returned JSON object response
            StreamReader userInfo = new StreamReader(user.GetResponse().GetResponseStream());
            string jsonResponse = string.Empty;
            jsonResponse = userInfo.ReadToEnd();

            // Deserialize and convert the JSON object to the Facebook.User object type
            JavaScriptSerializer sr = new JavaScriptSerializer();
            string jsondata = jsonResponse;
            Facebook.User converted = sr.Deserialize<Facebook.User>(jsondata);

            // Write the user data to a List
            List<Facebook.User> currentUser = new List<Facebook.User>();
            currentUser.Add(converted);

            // Return the current Facebook user
            return currentUser;


Facebook mi ritorna un json


{
   "id": "1020EEEEE00796",
   "name": "Pibe",
   "gender": "male",
   "cover": {
      "id": "10208XXXXX9461",
      "offset_y": 0,
      "source": "https://scontent.xx.fbcdn.net/v/t31.0-8/q85/s720x720/13641028_10208347UUUUU_2819440007590905659_o.jpg?oh=61c4d9e9d8a288433f05fd076b83b2ec&oe=59215688"
   },
   "picture": {
      "data": {
         "url": "https://scontent.xx.fbcdn.net/v/t1.0-1/p50x50/15940954_102097OOOOOPPPPP993_4887467687573942363_n.jpg?oh=02XXXX896ad3d481c6d2effe1581f410&oe=59YYY0C"
      }
   },
   "link": "https://www.facebook.com/app_scoped_user_id/1020XXXX300796/",
   "first_name": "Diego",
   "last_name": "Maradona"
}


In models ho una classe in cui setto questi valori

   public class Facebook
    {
        public class User
        {
            public string id { get; set; }
            public string first_name { get; set; }
            public string last_name { get; set; }
            public string link { get; set; }
            public string username { get; set; }
            public string gender { get; set; }
        
            public string picture { get; set; }
            public string cover { get; set; }
           
        }
    }


In questo punto praticamente
List<Facebook.User> currentUser = new List<Facebook.User>();
currentUser.Add(converted);
si vanno a riempire gli elementi contenuti in currentUser

Non riesco a prendere il valore cover e picture, ovvero il valore source di cover e url di picture.
C'è un sistema con questo codice fornito di prendere anche questi dati o posso in qualche altro modo usare il Deserialize?

Grazie

***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
fai così: butta via la tua attuale classe User e lasciala ricreare da Visual Studio in modo che rifletta più accuratamente la struttura del json che stai ricevendo. Infatti, al momento, la tua proprietà picture è una stringa ma dovrebbe invece essere un tipo complesso che ha dentro una proprietà data che è a sua volta un tipo complesso che ha una proprietà url di tipo string.
  • Copia il json che hai postato
  • Da Visual Studio, clicca il menu Modifica -> Incolla speciale -> Incolla JSON come classi
  • Ti verranno create varie classi tra cui una chiamata RootObject. Rinominala in User.
  • Ora deserializza con il codice che hai già.


Opzionale: valuta l'uso di Newtonsoft.Json per la deserializzazione, è un pacchetto NuGet molto popolare e con molte più funzionalità rispetto al JavaScriptSerializer.
Ecco come deserializzare, te la cavi con una riga di codice:
var user = JsonConvert.DeserializeObject<Facebook.User>(json);


ciao,
Moreno

Enjoy learning and just keep making
252 messaggi dal 03 dicembre 2001
www.fuossbook.it
Ciao Moreno,
grazie per l'aiuto.
Sono andato avanti e sono riuscito a riempire la classe, quindi ho delle string e due altre classi che sono cover e picture che all'interno contengono cover e picture.
Le domande ora che ti vorrei porre sono queste.
In una pagina vado a stampare i risultati del bind in questo modo

ovviamente per il picture non mi esce nulla, quindi come posso richiamarlo?

in questa immagine c'è il risultato del mio user
screen


Poi ti pongo già una domanda per andare avanti, anche se forse sembrerà banale ma mi sono perso, oltre a mostrarlo nella pagina dopo il bind vorrei fare una funzione per provare a scrivere questi dati in un db (cosa che non faccio per ora).

var obj = GetFacebookUserData(Request.QueryString["code"]);
GetFacebookUserData ritorno un tipo List<Facebook.User>

Questa classe in qualche modo la vorrei leggere facendo tipo

string nome = obj.nome
string urlPhoto = obj.

io ho provato così
List<Facebook.User> utente = obj;
string nome = utente.id;

ma in questo caso utente non ha id

Facebook.User utenti = new Facebook.User();

string mioNome = utenti.first_name;
e in questo utenti è vuoto

Mi sono perso in qualche cosa di base
Grazie


Ps: sicuramente finito l'esericizio ne faccio un altro con il Newtonsoft.Json. Grazie

***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


ovviamente per il picture non mi esce nulla, quindi come posso richiamarlo?

Dato che Picture è un oggetto complesso, dovrai usare un'espressione che includa tutti i nomi delle proprietà - separati dal punto - che ti permettono di arrivare all'url della foto.

Ieri dicevamo:

la tua proprietà picture è di un tipo complesso che ha dentro una proprietà data che è a sua volta di un tipo complesso che ha una proprietà url di tipo string.

Quindi dovresti provare con questa espressione:
<%# Eval("picture.data.url")%>


Mentre, a proposito dell'altra domanda:

io ho provato così
List<Facebook.User> utente = obj;
string nome = utente.id;

ma in questo caso utente non ha id

E' normale che non abbia un id perché la funzione GetFacebookUserData ti sta restituendo una lista di User, e non uno User singolo. Quindi devi prima prelevare il primo elemento dalla lista per poi leggere il suo id.
List<Facebook.User> utenti = GetFacebookUserData(Request.QueryString["code"]);
//Verifico che la lista non sia vuota
if (utenti.Count > 0) {
  //Se mi trovo qui dentro sono sicuro che almeno un elemento esiste
  //quindi ottengo un riferimento al primo utente della lista
  var utente = utenti[0];
  //e ora posso leggere il suo id
  var id = utente.id;

  //e lo uso in qualche modo...

}


ciao,
Moreno

Enjoy learning and just keep making

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.