Come mappa JSON ad Oggetti C#

Sto avendo problemi con la comprensione di come rendere questo accada.

Fondamentalmente abbiamo un’API, l’utente invia un JSON di formato: (scusa il codice se non e ‘ perfetto ma si capisce)

{"Profile": [{
    "Name":"Joe",
    "Last :"Doe",
    "Client":
    {
        "ClientId":"1",
        "Product":"Apple",
        "Message":"Peter likes apples"
    },
    "Date":"2012-02-14",
}]}

Ok non so se ho capito JSON formattato correttamente, ma ora ecco il mio problema.

Ho una classe chiamata Profile con i parametri Nome, Cognome, e un oggetto come uno dei suoi membri, chiamati Client di proprietà Data.

Qualcosa di simile a questo:

public class Profile
  {
     public string Name {get; set;}
     public string Last {get; set;}
     public Client client {get; set;}
     public DateTime dDate {get; set;}   
  }

Quindi, fondamentalmente, io non sono sicuro di come afferrare il JSON e poi si mappa per il mio oggetto.

Qualsiasi aiuto per “aiutare” mi è sembrato di capire che sarebbe molto apprezzato.

InformationsquelleAutor user710502 | 2012-04-03



4 Replies
  1. 38

    È possibile utilizzare Json.NET deserializzare la tua stringa json (con alcune modifiche per le classi)

    var yourObject =  JsonConvert.DeserializeObject<Root>(jsonstring);
    
    
    public class Root
    {
        public Profile[] Profile;
    }
    
    public class Profile
    {
        public string Name { get; set; }
        public string Last { get; set; }
        public Client Client { get; set; }
        public DateTime Date { get; set; }
    }
    
    public class Client
    {
        public int ClientId;
        public string Product;
        public string Message;
    }
    • Cool, che cosa è il ruolo della Radice di classe?, scusami se sono un newbie domanda 🙂
    • Dato che il tuo Profile array è all’interno di un oggetto json(root oggetto non dispone di un nome come xml). Ho chiamato Root, è possibile scegliere qualsiasi nome che si desidera
    • Wow!………..
    • Link è come l’ho inteso… ho tirato indietro il vostro aggiornamento
    • Perché è importante che la “t” in Json.Net non è parte del link? Che il web contro le convenzioni, quindi ci deve essere una buona ragione. È una specie di insider scherzo?
  2. 7

    È possibile utilizzare una libreria JSON per questo, per esempio Newtonsoft.Json che è gratuito. Sarà la mappa json per i tuoi tipi automaticamente.

    Esempio:

        public static T Deserialize<T>(string json)
        {
            Newtonsoft.Json.JsonSerializer s = new JsonSerializer();
            return s.Deserialize<T>(new JsonTextReader(new StringReader(json)));
        }

    C’è anche un pacchetto NuGet disponibili.

    • Cordiali saluti, è possibile anche aggiungere un pacchetto Nuget direttamente nel VS, che è molto comodo
  3. 1

    Modo più semplice che conosco è usare JSON.Net da newtonsoft.
    Per rendere più facile da capire, io faccio sempre corrispondenti classi in C# con lo stesso nome.
    Quindi è più facile per deserializzare di esso.
    Ad esempio, se si tratta di un array di oggetti in js, sarà la mappa di un elenco di oggetti con lo stesso nome in C#.
    Come per la data e l’ora, è un po ‘ complicato.
    Id fare la validazione lato client e di tipo Datetime.tryParse in serverside, itll prendere cura dei trattini o barre.

    var serializer = new JavaScriptSerializer();
    List<abc> abcList = serializer.Deserialize<List<abc>>(PassedInJsonString);

Lascia un commento