Ответ 1
Ну, как насчет:
dynamic jsonObject = new JObject();
jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against the world";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";
Для некоторых моих модульных тестов я хочу, чтобы возможность создавать определенные значения 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";
Ну, как насчет:
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 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 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 );