![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Документация. По этой ссылке находится документация
По этой ссылке находится документация. Мы начнем с простого преобразования объекта в 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-данных. Можно обрабатывать нетипичные записи дат, сложные структуры данных, формировать сериализацию своих классов.
|