2013-07-30 22 views
5

Używam tej metody do utworzenia ciągu json i działa poprawnie. Ale nie mogę sobie z tym poradzić, jeśli zawiera więcej właściwości. Czy istnieje inna lepsza metoda niż ta?Tworzenie ciągu formatu Json

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

Wyjście jest

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

Odpowiedz

8

Cóż, "lepszy" sposób to zrobić byłoby użyć biblioteki JSON. Jeśli jest to w kontekście strony internetowej Asp.Net (w tych ostatnich wersjach), istnieje biblioteka Json.Net, która jest automatycznie przywoływana. Jeśli nie, możesz użyć Nuget do dodania odnośnika do projektu lub ręcznie go dodać, w zależności od preferencji. Następnie można zrobić:

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

Pamiętaj, że możesz też po prostu użyć new { longUrl } i nazwisko nieruchomość będzie taka sama, jak nazwa zmiennej.

+0

Dzięki ten pracuje bez zarzutu ... –

+0

powinno być 'JsonConvert.SerializeObject (new {longUrl = longUrl});' chociaż :) – ajgarn

+0

@ajgarn To poprawny. Naprawione. :) –

2

Można po prostu użyć serializatora JSON, takiego jak JSON.NET. W przypadku jego braku, można uprościć nieco:

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

Wierzę, że to nie zadziała. Istnieje wiele {i} innych niż {0}, a to jest problematyczne w przypadku metody string.Format(). – wooohoh

1

Można użyć 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()); 
    } 
} 
0

można using System.Web.Script.Serialization; następnie zrobić

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

Można użyć JSON.Net bibliotekę. Możesz utworzyć klasę encji, którą chcesz ukryć w JSON, a nie za pomocą formantu stringów.

np.

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

wyjściowa:

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

+1, dzięki za szczegółowe wyjaśnienie –