web-dev-qa-db-fra.com

convertir une liste au format json - moyen rapide et facile

Disons que j'ai un objet MyObject qui ressemble à ceci:

public class MyObject
{
  int ObjectID {get;set;}
  string ObjectString {get;set;}
} 

J'ai une liste de MyObject et je cherche à la convertir en chaîne JSON avec un constructeur de chaînes. Je sais comment créer un convertisseur Javascript et créer une chaîne json en passant une liste et en ayant le convertisseur construit la chaîne, mais dans ce cas particulier, je cherche à éviter les frais généraux et à passer directement à une chaîne json avec une boucle foreach sur la liste. comme ça:

StringBuilder JsonString = new StringBuilder();

foreach(MyObject TheObject in ListOfMyObject)
{

}

J'ai essayé d'utiliser cette méthode en ajoutant des virgules et des guillemets, mais cela n'a pas encore fonctionné. 

Merci pour vos suggestions.

30
frenchie

J'ai déjà fait quelque chose comme avant d'utiliser la classe de sérialisation JavaScript :

using System.Web.Script.Serialization;

Et:

JavaScriptSerializer jss = new JavaScriptSerializer();

string output = jss.Serialize(ListOfMyObject);
Response.Write(output);
Response.Flush();
Response.End();
51
Mark Ursino

3 ans d'expérience plus tard, je suis revenu à cette question et suggérerais de l'écrire comme ceci:

string output = new JavaScriptSerializer().Serialize(ListOfMyObject);

Une ligne de code.

34
frenchie

Pour moi, cela a fonctionné d'utiliser Newtonsoft.Json:

using Newtonsoft.Json;
// ...
var output = JsonConvert.SerializeObject(ListOfMyObject);
12
user8128167

J'éviterais de rouler le vôtre et utiliserais soit:

System.Web.Script.JavascriptSerializer

ou

JSON.net

Les deux vont faire un excellent travail :)

6
Alastair Pitts

Je préfère utiliser la fonctionnalité linq-to-json de JSON.NET framework. Voici comment vous pouvez sérialiser une liste de vos objets sur json.

List<MyObject> list = new List<MyObject>();

Func<MyObject, JObject> objToJson =
    o => new JObject(
            new JProperty("ObjectId", o.ObjectId), 
            new JProperty("ObjectString", o.ObjectString));

string result = new JObject(new JArray(list.Select(objToJson))).ToString();

Vous contrôlez entièrement ce qui sera dans la chaîne de résultats JSON et vous le verrez clairement en regardant le code. Vous pouvez sûrement vous débarrasser de la déclaration Func<T1, T2> et spécifier ce code directement dans l'invocation new JArray(), mais avec ce code extrait vers Func<>, cela semble beaucoup plus clair sur ce qui se passe et comment vous transformez votre objet en json. Vous pouvez même stocker votre Func<> en dehors de cette méthode dans une sorte de méthode d'installation (c'est-à-dire dans le constructeur).

3
Dmitry Lobanov

pourquoi réinventer la roue? utiliser json de Microsoft sérialiser ou une bibliothèque tierce telle que json.NET

2
David Wick

Vous pouvez renvoyer la valeur à l'aide de Return JsonConvert.SerializeObject (objName); Et l'envoyer au serveur frontal.

0
Priyanka Arora