web-dev-qa-db-fra.com

Comment mapper des objets JSON à des objets C #

J'ai du mal à comprendre comment y arriver. 

Fondamentalement, nous avons une API, l'utilisateur envoie un JSON du format: (excusez le code s'il n'est pas parfait mais vous comprenez)

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

Ok, je ne suis pas sûr que le format JSON soit correctement formaté, mais voici maintenant mon problème.

J'ai une classe appelée Profile avec les paramètres Name, Last et un objet appartenant à l'un de ses membres, appelé Client, ainsi que la propriété Date.

Quelque chose comme ça:

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

Donc, fondamentalement, je ne sais pas comment saisir le JSON, puis le mapper sur mon objet.

Toute aide pour "m'aider" à comprendre serait très appréciée.

20
user710502

Vous pouvez utiliser Json.NET pour désérialiser votre chaîne json en tant que (avec quelques modifications à vos classes)

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;
}
34
L.B

Vous pouvez utiliser une bibliothèque JSON pour cela, par exemple Newtonsoft.Json qui est gratuit. Il mappera json automatiquement sur vos types.

Échantillon:

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

Un paquet NuGet est également disponible.

6
Marek

Le moyen le plus simple que je connaisse est d'utiliser JSON.Net de newtonsoft . Pour faciliter la compréhension, je crée toujours des classes correspondantes en C # avec le même nom. Il est alors plus facile de le désérialiser . Par exemple, s’il s’agit d’un tableau d’objets en js, il mappera sur une liste d’objets portant le même nom en C # . Comme pour la date et l’heure. , c’est un peu délicat. Id effectue la validation côté client et Datetime.tryParse au niveau du serveur, il s’occupe des tirets ou des barres obliques.

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

DataContractJsonSerializer effectue le travail, mais il utilise un format plus sophistiqué pour la sérialisation DateTime. 

0
lazyGoose