2013-07-30 2 views
5

Я использую этот метод для формирования строки json, и это работает нормально. Но я не могу справиться с этим, если он содержит больше свойств. Есть ли другой лучший метод, чем этот?Формирование строки Json Format

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

Выход

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

ответ

8

Ну, "лучше" способ сделать это было бы использовать библиотеку JSON. Если это связано с сайтом Asp.Net (в последних версиях), есть библиотека Json.Net, на которую автоматически ссылаются. Если нет, вы можете использовать Nuget, чтобы добавить ссылку на свой проект или добавить его вручную, в зависимости от того, что вы предпочитаете. Затем можно сделать:

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

Обратите внимание, что вы можете просто использовать new { longUrl } и имя свойства будет совпадать с именем переменной.

+0

Благодаря этим один работает отлично ... –

+0

Это должно быть 'JsonConvert.SerializeObject (новый {longUrl = longUrl});' хотя :) – ajgarn

+0

@ajgarn То есть верный. Починил это. :) –

2

Вы можете использовать JSON-сериализатор, такой как JSON.NET. В противном случае, вы можете упростить несколько:

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

Я считаю, что это не сработает. Есть несколько {и}, кроме {0}, и это проблематично для string.Format(). – wooohoh

1

Вы можете использовать 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

вы можете using System.Web.Script.Serialization; затем сделать

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

Вы можете использовать JSON.Net библиотеку. Вы можете создать класс сущности, который вы хотите скрывать для JSON, вместо использования форматирования строк.

, например.

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

выход:

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

+1, Спасибо за подробное объяснение –