Как конвертировать Json в C# объект? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть спецификация c Json, которую я хочу преобразовать в C# объект класса:

Json:

{
    "Database": "DEMO",
    "Schema": "PUBLIC",
    "Warehouse": "TEST_WH",
    "Query": "Call proc();",
    "Role": "SYSADMIN",
    "IsOpsTestRequest": "false",
    "QueryParameters": {
        "Param1": "abc",
        "Param2": "def"
    }
}

Класс:

public class Request_Body
{
    public string Database { get; set; }
    public string Schema { get; set; }
    public string Warehouse { get; set; }
    public string Query { get; set; }
    public string Role { get; set; }
    public string IsOpsTestRequest { get; set; }
    public List<(string, string)> QueryParameters { get; set; }
}

Я отправляю это json, когда отправляю запрос на публикацию в мою функцию azure функций http (долговременные функции), а затем пытаюсь преобразовать этот json в C# объект.

Если я удаляю QueryParameter Перечень списка из класса, а также удаляю QueryParameter из json, тогда он отлично работает, но я хочу это QueryParameter в json и оно должно быть обобщенным c - оно может содержать далее такие атрибуты, как param1 и param2 или иногда, может быть, больше. Так что это должно быть обобщенно c.

В моей функции триггера http я преобразую json в объект класса следующим образом:

Request_Body data = await req.Content.ReadAsAsync<Request_Body>();

Как я могу десериализовать json?

Ответы [ 2 ]

4 голосов
/ 08 апреля 2020

JSON для QueryParameters не представляет список или массив. Список или массив в JSON будут иметь квадратные скобки ([...]), окружающие значения.

Однако JSON может быть представлен Dictionary<string, string>. Итак, ваш класс должен выглядеть так:

public class Request_Body
{
    public string Database { get; set; }
    public string Schema { get; set; }
    public string Warehouse { get; set; }
    public string Query { get; set; }
    public string Role { get; set; }
    public string IsOpsTestRequest { get; set; }
    public Dictionary<string, string> QueryParameters { get; set; }
}
0 голосов
/ 08 апреля 2020

Попробуйте пакет newtonsoft json из nuget и используйте методы сериализации и десериализации. Например:

public class Account { 
     public string Email { get; set; }
     public bool Active { get; set; } 
     public DateTime CreatedDate { get; set; } 
     public IList<string> Roles { get; set; } }

Account account = JsonConvert.DeserializeObject<Account>(json); 

Console.WriteLine(account.Email);

Вы можете проверить здесь больше об этом пакете

...