Подтвердить что ты не робот

Создание 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";
4b9b3361

Ответ 1

Ну, как насчет:

dynamic jsonObject = new JObject();
jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against the world";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";

Ответ 2

Вы можете использовать операцию 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 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 для сериализации

Ответ 3

Существует некоторая среда, в которой вы не можете использовать динамический (например, 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 blog."),
             new JProperty("Artist", "2Pac")
         )

Дополнительная документация здесь: http://www.newtonsoft.com/json/help/html/CreatingLINQtoJSON.htm

Ответ 4

Вы можете использовать библиотеку 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 );