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