Создание JSON на лету с помощью JObject
для некоторых из моих модульных тестов я хочу иметь возможность создавать определенные значения JSON (в данном случае альбомы записей), которые могут использоваться в качестве входных данных для тестируемой системы.
у меня есть следующий код:
var jsonObject = new JObject();
jsonObject.Add("Date", DateTime.Now);
jsonObject.Add("Album", "Me Against The World");
jsonObject.Add("Year", 1995);
jsonObject.Add("Artist", "2Pac");
это отлично работает, но мне никогда не нравился синтаксис "волшебной строки" и я предпочел бы что-то ближе к синтаксису expando-property в JavaScript, например:
jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against The World";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";
6 ответов:
Ну, а как насчет:
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.
или у вас есть тестовые данные, которые являются динамическими вы можете использовать
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 } } });
есть некоторые среды, где вы не можете использовать динамические (например, 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
ни
dynamic, ниJObject.FromObjectрешение работает, когда у вас есть свойства JSON, которые не являются допустимыми именами переменных C#, например"@odata.etag". Я предпочитаю синтаксис инициализатора индексатора в моих тестовых случаях:JObject jsonObject = new JObject { ["Date"] = DateTime.Now, ["Album"] = "Me Against The World", ["Year"] = 1995, ["Artist"] = "2Pac" };имея отдельный набор вложенных символов для инициализации
JObjectи для добавления свойств к нему делает инициализаторы индекса более читаемыми, чем классические инициализаторы объектов, особенно в случае составных объектов JSON, как показано ниже:JObject jsonObject = new JObject { ["Date"] = DateTime.Now, ["Album"] = "Me Against The World", ["Year"] = 1995, ["Artist"] = new JObject { ["Name"] = "2Pac", ["Age"] = 28 } };С объекта синтаксис инициализатора, приведенная выше инициализация будет:
JObject jsonObject = new JObject { { "Date", DateTime.Now }, { "Album", "Me Against The World" }, { "Year", 1995 }, { "Artist", new JObject { { "Name", "2Pac" }, { "Age", 28 } } } };
простой способ создания newtonsoft JObject из свойств.
Это пример свойств пользователя
public class User { public string Name; public string MobileNo; public string Address; }и я хочу, чтобы это свойство в newtonsoft JObject:
JObject obj = JObject.FromObject(new User() { Name = "Manjunath", MobileNo = "9876543210", Address = "Mumbai, Maharashtra, India", });вывод будет выглядеть так:
{"Name":"Manjunath","MobileNo":"9876543210","Address":"Mumbai, Maharashtra, India"}
вы можете использовать библиотеку 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 );
Comments