【问题标题】:Forming Json Format String形成 Json 格式字符串
【发布时间】:2013-07-30 10:40:50
【问题描述】:

我正在使用这种方法来形成json 字符串,这工作正常。但如果它包含更多属性,我将无法处理。还有比这更好的方法吗?

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

输出是

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

【问题讨论】:

    标签: c# string.format


    【解决方案1】:

    嗯,一个“更好”的方法是使用 Json 库。如果这是在 Asp.Net 网站的上下文中(在后面的版本中),则会自动引用 Json.Net 库。如果没有,您可以使用 Nuget 添加对项目的引用或手动添加它,无论您喜欢哪种方式。然后你可以这样做:

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

    请注意,您也可以只使用new { longUrl },并且属性名称将与您的变量名称相同。

    【讨论】:

    • 虽然应该是JsonConvert.SerializeObject(new { longUrl = longUrl }); :)
    【解决方案2】:

    您可以使用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 = "james@example.com",
        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": "james@example.com",
    //   "Active": true,
    //   "CreatedDate": "2013-01-20T00:00:00Z",
    //   "Roles": [
    //     "User",
    //     "Admin"
    //   ]
    // }
    

    【讨论】:

      【解决方案3】:

      您可以只使用 JSON 序列化程序,例如 JSON.NET。如果做不到这一点,您可以稍微简化一下:

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

      【讨论】:

      • 我相信这行不通。除了 {0} 之外还有多个 { 和 },这对于 string.Format() 来说是有问题的。
      【解决方案4】:

      您可以使用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());
          }
      }
      

      【讨论】:

        【解决方案5】:

        你可以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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-25
          • 1970-01-01
          • 1970-01-01
          • 2013-04-27
          • 2021-01-27
          • 2018-01-10
          • 2016-12-21
          相关资源
          最近更新 更多