使用JObject即时创buildJSON
对于我的一些unit testing,我希望能够build立特定的JSON值(在这种情况下是录制专辑),可以用作被测系统的input。
我有以下代码:
var jsonObject = new JObject(); jsonObject.Add("Date", DateTime.Now); jsonObject.Add("Album", "Me Against The World"); jsonObject.Add("Year", 1995); jsonObject.Add("Artist", "2Pac");
这工作正常,但我从来没有真正喜欢“魔术string”的语法,并希望更接近于JavaScript中的expando属性语法是这样的:
jsonObject.Date = DateTime.Now; jsonObject.Album = "Me Against The World"; jsonObject.Year = 1995; jsonObject.Artist = "2Pac";
那么,怎么样:
dynamic jsonObject = new JObject(); jsonObject.Date = DateTime.Now; jsonObject.Album = "Me Against the world"; jsonObject.Year = 1995; jsonObject.Artist = "2Pac";
您可以使用JObject.Parse
操作,只需提供单引号分隔的JSON文本。
JObject o = JObject.Parse(@"{ 'CPU': 'Intel', 'Drives': [ 'DVD read/writer', '500 gigabyte hard drive' ] }");
这实际上是JSON的好处,所以它读作JSON。
或者你有testing数据是dynamic的,你可以使用JObject.FromObject
操作并提供一个内联对象。
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 } } });
用于序列化的Json.net文档
有一些你不能使用dynamic的环境(例如Xamarin.iOS)或者你只是寻找替代以前有效答案的情况。
在这些情况下你可以这样做:
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") )
更多文档在这里: http : //www.newtonsoft.com/json/help/html/CreatingLINQtoJSON.htm
您可以使用Newtonsoft库并使用它,如下所示
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 );