web-dev-qa-db-fra.com

Formant la chaîne de format Json

J'utilise cette méthode pour former la chaîne json et cela fonctionne très bien. Mais je ne peux pas gérer cela s'il contient plus de propriétés. Existe-t-il une meilleure méthode que celle-là?

string.Format("{0}{1}longUrl{1}:{1}{2}{1}{3}", "{", "\"", longUrl,"}");

La sortie est

{"longUrl":"http://api.themoviedb.org/3/person/12835?api_key=2c50a994de5291887a4e062edd229a72"}
7
user1618825

Eh bien, une "meilleure" façon de faire serait d'utiliser une bibliothèque Json. Si cela se trouve dans le contexte d'un site Web Asp.Net (dans les dernières versions), il existe la bibliothèque Json.Net qui est automatiquement référencée. Sinon, vous pouvez utiliser Nuget pour ajouter une référence à votre projet ou l'ajouter manuellement, selon votre préférence. Vous pourriez alors faire:

JsonConvert.SerializeObject(new { longUrl = longUrl });

Notez que vous pouvez également simplement utiliser new { longUrl } et le nom de la propriété sera identique à celui de votre variable.

11
Simon Belanger

Vous pouvez utiliser JSON.Net library. Vous pouvez créer une classe d'entité que vous souhaitez convertir en JSON plutôt que d'utiliser le formateur de chaîne.

par exemple 

    public class Account
    {
      public string Email { get; set; }
      public bool Active { get; set; }
      public DateTime CreatedDate { get; set; }
      public IList<string> Roles { get; set; } 
    }

Account account = new Account
  {
    Email = "[email protected]",
    Active = true,
    CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, DateTimeKind.Utc),
    Roles = new List<string>
      {
        "User",
        "Admin"
      }
  };

string json = JsonConvert.SerializeObject(account, Formatting.Indented);

Console.WriteLine(json);

sortie:

// {
//   "Email": "[email protected]",
//   "Active": true,
//   "CreatedDate": "2013-01-20T00:00:00Z",
//   "Roles": [
//     "User",
//     "Admin"
//   ]
// }
7
vendettamit

Vous pouvez simplement utiliser un sérialiseur JSON tel que JSON.NET . À défaut, vous pouvez simplifier un peu:

string.Format(@"{{""longUrl"":""{0}""}}", longUrl);
2
Kent Boogaart

Vous pouvez utiliser Newtonsoft.Json :

using System.Text;
using Newtonsoft.Json;
using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var d = new
        {
            longUrl = "http://api.themoviedb.org/3/person/12835?api_key=2c50a994de5291887a4e062edd229a72",
            someOtherProeprty = 1
        };
        var s = new JsonSerializer();
        var sb = new StringBuilder();
        using (var w = new StringWriter(sb))
        {
            s.Serialize(w, d);
        }
        Console.WriteLine(sb.ToString());
    }
}
1
Alex Filipovici

vous pouvez using System.Web.Script.Serialization; puis faire 

 var dict = new Dictionary<string, string>
            {
                {"longUrl","http://api.themoviedb.org/3/person/12835?api_key=2c50a994de5291887a4e062edd229a72"},
                {"anotherUrl", "another Url"}
            };

var serializer = new JavaScriptSerializer();
serializer.Serialize(dict);
0
Utku