J'ai un modèle objet qui ressemble à ceci:
public MyObjectInJson
{
public long ObjectID {get;set;}
public string ObjectInJson {get;set;}
}
La propriété ObjectInJson
est une version déjà sérialisée d'un objet qui contient des listes imbriquées. Pour le moment, je sérialise la liste MyObjectInJson
manuellement comme ceci:
StringBuilder TheListBuilder = new StringBuilder();
TheListBuilder.Append("[");
int TheCounter = 0;
foreach (MyObjectInJson TheObject in TheList)
{
TheCounter++;
TheListBuilder.Append(TheObject.ObjectInJson);
if (TheCounter != TheList.Count())
{
TheListBuilder.Append(",");
}
}
TheListBuilder.Append("]");
return TheListBuilder.ToString();
Je me demande si je peux remplacer ce genre de code dangereux par JavascriptSerializer
et obtenir les mêmes résultats. Comment ferais-je cela?
Merci.
System.Web.Extensions
pour utiliserSystem.Web.Script.Serialization
: stackoverflow.com/a/18746092/1599699 stackoverflow.com/a/19299695/1599699Réponses:
Si vous utilisez .Net Core 3.0 ou version ultérieure;
Par défaut, utilisez l'
System.Text.Json
implémentation de l'analyseur intégrépar exemple
Alternativement, d'autres options moins courantes sont disponibles comme l' analyseur Utf8Json et Jil : elles peuvent offrir des performances supérieures , si vous en avez vraiment besoin, mais vous devrez installer leurs packages respectifs.
En cas de blocage avec .Net Core 2.2 ou version antérieure;
Par défaut, utilisez Newtonsoft JSON.Net comme analyseur JSON de premier choix.
par exemple
vous devrez peut-être d'abord installer le package.
Pour plus de détails, consultez et votez pour la réponse qui est la source de ces informations .
Pour référence seulement, c'était la réponse originale, il y a de nombreuses années;
la source
Vous pouvez également utiliser Json.NET. Téléchargez-le simplement sur http://james.newtonking.com/pages/json-net.aspx , extrayez le fichier compressé et ajoutez-le comme référence.
Ensuite, sérialisez simplement la liste (ou l'objet de votre choix) avec ce qui suit:
Mise à jour: vous pouvez également l'ajouter à votre projet via le gestionnaire de package NuGet (Outils -> Gestionnaire de package NuGet -> Console du gestionnaire de package):
Documentation: sérialisation des collections
la source
Il existe deux façons courantes de le faire avec les sérialiseurs JSON intégrés:
JavaScriptSerializer
DataContractJsonSerializer
Notez que cette option nécessite la définition d'un contrat de données pour votre classe:
la source
la source
.NET prend déjà en charge la sérialisation Json de base via l' espace de noms System.Runtime.Serialization.Json et la classe DataContractJsonSerializer depuis la version 3.5. Comme son nom l'indique, DataContractJsonSerializer prend en compte toutes les annotations de données que vous ajoutez à vos objets pour créer la sortie Json finale.
Cela peut être pratique si vous avez déjà des classes de données annotées que vous souhaitez sérialiser Json dans un flux, comme décrit dans Comment: sérialiser et désérialiser les données JSON . Il y a des limitations mais c'est assez bon et assez rapide si vous avez des besoins de base et ne voulez pas ajouter Yet Another Library à votre projet.
Le code suivant sérialise une liste dans le flux de sortie de la console. Comme vous le voyez, il est un peu plus détaillé que Json.NET et non de type sécurisé (c'est-à-dire pas de génériques)
D'autre part, Json.NET offre un bien meilleur contrôle sur la façon dont vous générez Json. Cela sera TRÈS pratique lorsque vous devrez mapper des noms de noms compatibles avec javascript à des classes .NET, formater des dates en json, etc.
Une autre option est ServiceStack.Text , qui fait partie de la pile ServicStack ..., qui fournit un ensemble de sérialiseurs très rapides pour Json, JSV et CSV.
la source
en me basant sur une réponse d'une autre publication. J'ai trouvé un moyen plus générique de créer une liste, en utilisant la récupération dynamique avec Json.NET version 12.x
appel à traiter
ou cet appel à traiter
la source