Страницы

Поиск по вопросам

вторник, 9 апреля 2019 г.

Помогите создать класс для JSON

Мне приходит от сервера вот такой ответ:
{ "request.id" : null, "list" : { "email1@email.com" : { "Type" : "1" }, "email2@email.com" : { "Type" : "1" }, "email3@email.com" : { "Type" : "1" } }
Как и в какой класс мне его преобразовать при помощи библиотеки JSON.Net на C#? Учитывая, что Email в List могут быть всегда разные.


Ответ

Существуют несколько инструментов для генерации C# классов из JSON строки:
http://json2csharp.com Если у вас установлено Web Essentials в Visual Studio, то выполните Edit > Paste special > paste JSON as class. Можно воспользоваться бесплатной программой jsonclassgenerator.exe
Любой из этих инструментов на выходе дает классы, используемые для сериализации/десериализации JSON строки. Сам лично в большинстве случаем пользуюсь инструментом под номером 3.
На выходе для вашего примера он дает следующие классы
namespace Example {
internal class SampleResponse1 {
[JsonProperty("request.id")] public object RequestId { get; set; }
[JsonProperty("list")] public List List { get; set; } }
}
namespace Example.SampleResponse1JsonTypes {
internal class List {
[JsonProperty("email1@email.com")] public Email1EmailCom Email1EmailCom { get; set; }
[JsonProperty("email2@email.com")] public Email2EmailCom Email2EmailCom { get; set; }
[JsonProperty("email3@email.com")] public Email3EmailCom Email3EmailCom { get; set; } }
internal class Email1EmailCom {
[JsonProperty("Type")] public string Type { get; set; } }
internal class Email2EmailCom {
[JsonProperty("Type")] public string Type { get; set; } } internal class Email3EmailCom { [JsonProperty("Type")] public string Type { get; set; } }
}
Учитывая, что Email в List могут быть всегда разные.
В таком случае, для генерации С# классов ваш JSON должен модифицироваться в такой вид
{ "request.id" : null, "list" : [ { "email" : { Name: "email1@email.com", Type: "1" }, "email" : { Name: "email2@email.com", Type: "1" } }] }
Иначе вы не сможете сгенерировать классы с переменным названием класса. Изменяемая часть не должна быть ключом JSON-объекта. Для генерации C# классов ключи JSON объектов должны быть фиксированными. Ключ содержит в себе название генерируемого класса. Либо нужно попробовать переписать этот пример через Dictionary. В итоге получился такой вариант.
namespace Example {
internal class SampleResponse1 {
[JsonProperty("request.id")] public object RequestId { get; set; }
[JsonProperty("list")] public Dictionary List { get; set; } }
} namespace Example.SampleResponse1JsonTypes { class Email { [JsonProperty("type")] public string Type{ get; set; } } }

Комментариев нет:

Отправить комментарий