Para alguns de meus testes de unidade, desejo a capacidade de construir valores JSON específicos (álbuns de registro neste caso) que podem ser usados como entrada para o sistema em teste.
Eu tenho o seguinte código:
var jsonObject = new JObject();
jsonObject.Add("Date", DateTime.Now);
jsonObject.Add("Album", "Me Against The World");
jsonObject.Add("Year", 1995);
jsonObject.Add("Artist", "2Pac");
Isso funciona bem, mas eu nunca gostei muito da sintaxe da "string mágica" e preferiria algo mais próximo da sintaxe expando-property em JavaScript como esta:
jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against The World";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";
Respostas:
Bem, que tal:
dynamic jsonObject = new JObject(); jsonObject.Date = DateTime.Now; jsonObject.Album = "Me Against the world"; jsonObject.Year = 1995; jsonObject.Artist = "2Pac";
fonte
dynamic
.dynamic jsonExpando = new ExpandoObject();
e adicionar uma linha após o seu código:JObject jsonObject = JObject.FromObject(jsonExpando);
jsonObject.list = JToken.FromObject(mylist);
.Você pode usar a
JObject.Parse
operação e simplesmente fornecer texto JSON delimitado por aspas simples.JObject o = JObject.Parse(@"{ 'CPU': 'Intel', 'Drives': [ 'DVD read/writer', '500 gigabyte hard drive' ] }");
Isso tem a vantagem de ser realmente JSON e, portanto, é lido como JSON.
Ou você tem dados de teste que são dinâmicos, você pode usar a
JObject.FromObject
operação e fornecer um objeto embutido.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 } } });
Documentação Json.net para serialização
fonte
JObject.FromObject
não funcionará se houver propriedades com caracteres especiais como-
.Nem
dynamic
, nem aJObject.FromObject
solução funciona quando você tem propriedades JSON que não são nomes de variáveis C # válidos, por exemplo"@odata.etag"
. Eu prefiro a sintaxe do inicializador do indexador em meus casos de teste:JObject jsonObject = new JObject { ["Date"] = DateTime.Now, ["Album"] = "Me Against The World", ["Year"] = 1995, ["Artist"] = "2Pac" };
Ter um conjunto separado de símbolos delimitadores para inicializar
JObject
e adicionar propriedades torna os inicializadores de índice mais legíveis do que os inicializadores de objeto clássicos, especialmente no caso de objetos JSON compostos conforme abaixo:JObject jsonObject = new JObject { ["Date"] = DateTime.Now, ["Album"] = "Me Against The World", ["Year"] = 1995, ["Artist"] = new JObject { ["Name"] = "2Pac", ["Age"] = 28 } };
Com a sintaxe do inicializador de objetos, a inicialização acima seria:
JObject jsonObject = new JObject { { "Date", DateTime.Now }, { "Album", "Me Against The World" }, { "Year", 1995 }, { "Artist", new JObject { { "Name", "2Pac" }, { "Age", 28 } } } };
fonte
Existem alguns ambientes onde você não pode usar dinâmico (por exemplo, Xamarin.iOS) ou casos em que você apenas procura uma alternativa para as respostas válidas anteriores.
Nestes casos, você pode fazer:
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") )
Mais documentação aqui: http://www.newtonsoft.com/json/help/html/CreatingLINQtoJSON.htm
fonte
Maneira simples de criar newtonsoft JObject de Propriedades.
Este é um exemplo de propriedades do usuário
public class User { public string Name; public string MobileNo; public string Address; }
e eu quero esta propriedade em Newtonsoft JObject é:
JObject obj = JObject.FromObject(new User() { Name = "Manjunath", MobileNo = "9876543210", Address = "Mumbai, Maharashtra, India", });
A saída será assim:
{"Name":"Manjunath","MobileNo":"9876543210","Address":"Mumbai, Maharashtra, India"}
fonte
Mais cedo ou mais tarde você terá um imóvel com caráter especial. Você pode usar índice ou combinação de índice e propriedade.
dynamic jsonObject = new JObject(); jsonObject["Create-Date"] = DateTime.Now; //<-Index use jsonObject.Album = "Me Against the world"; //<- Property use jsonObject["Create-Year"] = 1995; //<-Index use jsonObject.Artist = "2Pac"; //<-Property use
fonte
Você pode usar a biblioteca Newtonsoft e usá-la da seguinte maneira
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 );
fonte