2013-07-30 16 views
5

Ich verwende diese Methode, um json Zeichenfolge zu bilden, und das funktioniert gut. Aber ich kann nicht damit umgehen, wenn es mehr Eigenschaften enthält. Gibt es noch eine andere bessere Methode?JSON Format String bilden

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

Der Ausgang ist

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

Antwort

8

Nun, eine "bessere" Art und Weise, dies zu tun wäre, eine Json-Bibliothek zu verwenden. Wenn dies im Kontext einer Asp.Net-Website (in den letzteren Versionen) geschieht, gibt es die Json.Net-Bibliothek, auf die automatisch verwiesen wird. Wenn nicht, können Sie mit Nuget einen Verweis auf Ihr Projekt hinzufügen oder manuell hinzufügen, je nachdem, was Sie bevorzugen. Sie könnten dann tun:

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

Beachten Sie, dass Sie auch new { longUrl } nur verwenden können, und der Name der Eigenschaft wird das gleiche wie Ihr Variablenname sein.

+0

Dank dieses feinen arbeitet ... –

+0

Es sollte 'JsonConvert.SerializeObject (neu {longUrl = longUrl});' aber :) – ajgarn

+0

@ajgarn Das ist richtig. Behoben. :) –

2

Sie könnten einfach einen JSON-Serializer wie JSON.NET verwenden. Gelingt das nicht, können Sie etwas vereinfachen:

string.Format(@"{{""longUrl"":""{0}""}}", longUrl); 
+0

Ich glaube, es wird nicht funktionieren. Es gibt mehrere {und} andere als {0} und das ist problematisch für string.Format(). – wooohoh

1

Sie Newtonsoft.Json verwenden:

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()); 
    } 
} 
0

können Sie using System.Web.Script.Serialization; dann tun

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); 
7

Sie JSON.Net Bibliothek verwenden können. Sie können eine Entitätsklasse erstellen, die Sie in JSON konvertieren möchten, anstatt String-Formatierer zu verwenden.

für z.B.

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); 

Ausgang:

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

+1, Danke für die detaillierte Erklärung –