Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Документация. По этой ссылке находится документация






По этой ссылке находится документация. Мы начнем с простого преобразования объекта в json-формат и обратно. Создадим LessonProject.Console и сделаем его проектом по-умолчанию. Добавим тип User:

public class User

{

public string Id { get; set; }

 

public string Name { get; set; }

 

public string FirstName { get; set; }

 

public string MiddleName { get; set; }

 

public string LastName { get; set; }

 

public string UserName { get; set; }

 

public string Gender { get; set; }

 

public string Email { get; set; }

}

Создадим объект и преобразуем в json:

var user = new User()

{

Id = " 404",

Email = " chernikov@gmail.com",

UserName = " rollinx",

Name = " Andrey",

FirstName = " Andrey",

MiddleName = " Alexandrovich",

LastName = " Chernikov",

Gender = " M"

};

 

var jsonUser = JsonConvert.SerializeObject(user);

System.Console.Write(jsonUser);

 

System.Console.ReadLine();

Результат:

{" Id": " 404", " Name": " Andrey", " FirstName": " Andrey", " MiddleName": " Alexandrovich", " LastName": " Chernikov", " UserName": " rollinx", " Gender": " M", " Email": " chernikov@gmail.com" }

 

Попробуем обратное:

var jsonUserSource = " {\" Id\": \" 405\", \" Name\": \" Andrey\", \" FirstName\": \" Andrey\", \" MiddleName\": \" Alexandrovich\", \" LastName\": \" Chernikov\", \" UserName\": \" rollinx\", \" Gender\": \" M\", \" Email\": \" chernikov@gmail.com\" }";

 

var user2 = JsonConvert.DeserializeObject< User> (jsonUserSource);

И получаем результат:

 

Т.е. работает в обоих направлениях. Но немного усложним. Например, зададим Gender через перечисляемый тип Male и Female, и в json должно передаваться именно Male и Female. А Id – это числовое значение:

public class User

{

public enum GenderEnum

{

Male,

Female

}

 

public int Id { get; set; }

 

public string Name { get; set; }

 

public string FirstName { get; set; }

 

public string MiddleName { get; set; }

 

public string LastName { get; set; }

 

public string UserName { get; set; }

 

public GenderEnum Gender { get; set; }

 

public string Email { get; set; }

}

Пробуем первую часть:

var user = new User()

{

Id = 404,

Email = " chernikov@gmail.com",

UserName = " rollinx",

Name = " Andrey",

FirstName = " Andrey",

MiddleName = " Alexandrovich",

LastName = " Chernikov",

Gender = User.GenderEnum.Male

};

 

var jsonUser = JsonConvert.SerializeObject(user);

Результат:

{ " Id": 404, " Name": " Andrey", " FirstName": " Andrey", " MiddleName": " Alexandrovich", " LastName": " Chernikov", " UserName": " rollinx", " Gender": 0, " Email": " chernikov@gmail.com" }

Добавим:

[JsonConverter(typeof(StringEnumConverter))]

public enum GenderEnum

{

Male,

Female

}

Результат:

{" Id": 404, " Name": " Andrey", " FirstName": " Andrey", " MiddleName": " Alexandrovich", " LastName": " Chernikov", " UserName": " rollinx", " Gender": " Male", " Email": " chernikov@gmail.com" }

Уже лучше. Обратно проверяем – всё ок. Изучим другие атрибуты, задающие тонкие правила настройки. Например, в json-формате будут имена в венгерской записи типа first_name:

[JsonObject]

public class User

{

[JsonConverter(typeof(StringEnumConverter))]

public enum GenderEnum

{

Male,

Female

}

 

[JsonProperty(" id")]

public int Id { get; set; }

 

[JsonProperty(" name")]

public string Name { get; set; }

 

[JsonProperty(" first_name")]

public string FirstName { get; set; }

 

[JsonProperty(" middle_name")]

public string MiddleName { get; set; }

 

[JsonProperty(" last_name")]

public string LastName { get; set; }

 

[JsonProperty(" user_name")]

public string UserName { get; set; }

 

[JsonProperty(" gender")]

public GenderEnum Gender { get; set; }

 

[JsonProperty(" email")]

public string Email { get; set; }

}

 

 

Результат:

{" id": 404, " name": " Andrey", " first_name": " Andrey", " middle_name": " Alexandrovich", " last_name": " Chernikov", " user_name": " rollinx", " gender": " Male", " email": " chernikov@gmail.com" }

Для описания списка добавим класс Photo:

[JsonObject]

public class Photo

{

[JsonProperty(" id")]

public int Id { get; set; }

 

[JsonProperty(" name")]

public string Name { get; set; }

}

И в User добавим:

[JsonProperty(" photo_album")]

public List< Photo> PhotoAlbum { get; set; }

Результат:

{" id": 404, " name": " Andrey", " first_name": " Andrey", " middle_name": " Alexandrovich", " last_name": " Chernikov", " user_name": " rollinx", " gender": " Male", " email": " chernikov@gmail.com", " photo_album": [{" id": 1, " name": " Я с инстаграммом" }, {" id": 2, " name": " Я на фоне заниженного таза" }]}

Всё просто и предсказуемо.

Разберем сложный случай, например, когда для Gender нам надо описывать не Male\Female, а M\F. Для этого создаем класс по разбору GenderEnumConverter:

public class GenderEnumConverter: JsonConverter

{

public override object ReadJson(JsonReader reader,

Type objectType,

object existingValue,

JsonSerializer serializer)

{

var value = reader.Value.ToString();

if (string.Compare(value, " M", true) == 0)

{

return User.GenderEnum.Male;

}

if (string.Compare(value, " F", true) == 0)

{

return User.GenderEnum.Female;

}

return User.GenderEnum.Male;

}

 

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)

{

var obj = (User.GenderEnum)value;

 

// Write associative array field name

writer.WriteValue(value.ToString().Substring(0, 1));

}

 

public override bool CanConvert(Type objectType)

{

return false;

}

}

И устанавливаем этот конвертер для обработки

[JsonConverter(typeof(GenderEnumConverter))]

public enum GenderEnum

{

Male,

Female

}

Вообще, конвертеры могут быть бесконечно сложными для разбора json-данных. Можно обрабатывать нетипичные записи дат, сложные структуры данных, формировать сериализацию своих классов.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.