Мне приходит от сервера вот такой ответ:
{
"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
}
namespace Example.SampleResponse1JsonTypes
{
class Email
{
[JsonProperty("type")]
public string Type{ get; set; }
}
}
Комментариев нет:
Отправить комментарий