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

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
            }
    }
});

Json.net документация для сериализации

есть некоторые среды, где вы не можете использовать динамические (например, 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

    Ничего не найдено.