12

このメソッドを使用してjson文字列を形成していますが、これは正常に機能しています。しかし、それ以上のプロパティが含まれていると、これを処理できません。これ以外に良い方法はありますか?

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

出力は

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

5 に答える 5

16

これを行う「より良い」方法は、Json ライブラリを使用することです。これが Asp.Net Web サイト (後者のバージョン) のコンテキストにある場合、自動的に参照されるJson.Netライブラリがあります。そうでない場合は、Nuget を使用してプロジェクトへの参照を追加するか、手動で追加することができます。次に、次のことができます。

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

を使用することもできnew { longUrl }、プロパティ名は変数名と同じになることに注意してください。

于 2013-07-30T10:47:14.163 に答える
8

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"
//   ]
// }
于 2013-07-30T10:52:24.940 に答える
6

JSON.NETなどの JSON シリアライザーを使用できます。それができない場合は、いくらか単純化できます。

string.Format(@"{{""longUrl"":""{0}""}}", longUrl);
于 2013-07-30T10:47:40.110 に答える
2

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());
    }
}
于 2013-07-30T10:47:56.527 に答える
1

その後、次のことができ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);
于 2013-07-30T10:51:32.883 に答える