Untuk beberapa pengujian unit saya, saya ingin kemampuan untuk membangun nilai JSON tertentu (merekam album dalam kasus ini) yang dapat digunakan sebagai input untuk sistem yang diuji.
Saya memiliki kode berikut:
var jsonObject = new JObject();
jsonObject.Add("Date", DateTime.Now);
jsonObject.Add("Album", "Me Against The World");
jsonObject.Add("Year", 1995);
jsonObject.Add("Artist", "2Pac");
Ini berfungsi dengan baik, tetapi saya tidak pernah benar-benar menyukai sintaks "string ajaib" dan lebih suka sesuatu yang lebih dekat dengan sintaks properti-perluasan dalam JavaScript seperti ini:
jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against The World";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";
Jawaban:
Nah, bagaimana kalau:
dynamic jsonObject = new JObject(); jsonObject.Date = DateTime.Now; jsonObject.Album = "Me Against the world"; jsonObject.Year = 1995; jsonObject.Artist = "2Pac";
sumber
dynamic
.dynamic jsonExpando = new ExpandoObject();
dan menambahkan baris setelah kode Anda:JObject jsonObject = JObject.FromObject(jsonExpando);
jsonObject.list = JToken.FromObject(mylist);
.Anda dapat menggunakan
JObject.Parse
operasi ini dan cukup memberikan teks JSON yang dipisahkan tanda kutip tunggal.JObject o = JObject.Parse(@"{ 'CPU': 'Intel', 'Drives': [ 'DVD read/writer', '500 gigabyte hard drive' ] }");
Ini memiliki keuntungan bagus menjadi JSON sehingga terbaca sebagai JSON.
Atau Anda memiliki data uji yang dinamis, Anda dapat menggunakan
JObject.FromObject
operasi dan menyediakan objek sebaris.JObject o = JObject.FromObject(new { channel = new { title = "James Newton-King", link = "http://james.newtonking.com", description = "James Newton-King's blog.", item = from p in posts orderby p.Title select new { title = p.Title, description = p.Description, link = p.Link, category = p.Categories } } });
Dokumentasi Json.net untuk serialisasi
sumber
JObject.FromObject
tidak akan berfungsi jika ada properti dengan karakter khusus seperti-
.Baik
dynamic
, maupunJObject.FromObject
solusi tidak berfungsi ketika Anda memiliki properti JSON yang bukan nama variabel C # yang valid misalnya"@odata.etag"
. Saya lebih suka sintaks penginisialisasi pengindeks dalam kasus pengujian saya:JObject jsonObject = new JObject { ["Date"] = DateTime.Now, ["Album"] = "Me Against The World", ["Year"] = 1995, ["Artist"] = "2Pac" };
Memiliki set simbol penutup terpisah untuk menginisialisasi
JObject
dan untuk menambahkan properti ke dalamnya membuat penginisialisasi indeks lebih mudah dibaca daripada penginisialisasi objek klasik, terutama dalam kasus objek gabungan JSON seperti di bawah ini:JObject jsonObject = new JObject { ["Date"] = DateTime.Now, ["Album"] = "Me Against The World", ["Year"] = 1995, ["Artist"] = new JObject { ["Name"] = "2Pac", ["Age"] = 28 } };
Dengan sintaks penginisialisasi objek, inisialisasi di atas akan menjadi:
JObject jsonObject = new JObject { { "Date", DateTime.Now }, { "Album", "Me Against The World" }, { "Year", 1995 }, { "Artist", new JObject { { "Name", "2Pac" }, { "Age", 28 } } } };
sumber
Ada beberapa lingkungan di mana Anda tidak dapat menggunakan dinamika (misalnya Xamarin.iOS) atau kasus di mana Anda hanya mencari alternatif dari jawaban valid sebelumnya.
Dalam kasus ini, Anda dapat melakukan:
using Newtonsoft.Json.Linq; JObject jsonObject = new JObject( new JProperty("Date", DateTime.Now), new JProperty("Album", "Me Against The World"), new JProperty("Year", "James 2Pac-King's blog."), new JProperty("Artist", "2Pac") )
Dokumentasi lebih lanjut di sini: http://www.newtonsoft.com/json/help/html/CreatingLINQtoJSON.htm
sumber
Cara sederhana untuk membuat JObject newtonsoft dari Properties.
Ini adalah Contoh Properti Pengguna
public class User { public string Name; public string MobileNo; public string Address; }
dan saya ingin properti ini di newtonsoft JObject adalah:
JObject obj = JObject.FromObject(new User() { Name = "Manjunath", MobileNo = "9876543210", Address = "Mumbai, Maharashtra, India", });
Outputnya akan seperti ini:
{"Name":"Manjunath","MobileNo":"9876543210","Address":"Mumbai, Maharashtra, India"}
sumber
Cepat atau lambat Anda akan memiliki properti dengan karakter khusus. Anda dapat menggunakan indeks atau kombinasi indeks dan properti.
dynamic jsonObject = new JObject(); jsonObject["Create-Date"] = DateTime.Now; //<-Index use jsonObject.Album = "Me Against the world"; //<- Property use jsonObject["Create-Year"] = 1995; //<-Index use jsonObject.Artist = "2Pac"; //<-Property use
sumber
Anda dapat menggunakan perpustakaan Newtonsoft dan menggunakannya sebagai berikut
using Newtonsoft.Json; public class jb { public DateTime Date { set; get; } public string Artist { set; get; } public int Year { set; get; } public string album { set; get; } } var jsonObject = new jb(); jsonObject.Date = DateTime.Now; jsonObject.Album = "Me Against The World"; jsonObject.Year = 1995; jsonObject.Artist = "2Pac"; System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); string sJSON = oSerializer.Serialize(jsonObject );
sumber