Десериализация в класс работает неправильноC#

Место общения программистов C#
Ответить
Anonymous
 Десериализация в класс работает неправильно

Сообщение Anonymous »

Пытаюсь захватить Digicert Automation API с помощью Refit HttpClient Factory.
Когда мой метод интерфейса объявлен возвращающим строку
Task GetAgentList([Body] GetAgentListReq req);
По возвращенной строке я вижу, что получаю ожидаемый результат JSON от API. В частности, элемент data возвращает элемент AgentList с массивом агентов JSON.
Когда я меняю метод интерфейса для возврата определенного класса результата
Task GetAgentList([Body] GetAgentListReq req);
Десериализация происходит без создания исключения, но элемент данных имеет значение null.
Вот мой интерфейс и классы:
using Refit;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Digicert.Automation.API.Client
{
[Headers("X-DC-DEVKEY: redacted")]
public interface IDigicertAutomation
{

[Post("/agent/basicdetails")]
Task GetAgentSummary(AgentSummaryReq req);

[Post("/agent/list")]
//Task GetAgentList([Body] GetAgentListReq req);
Task GetAgentList([Body] GetAgentListReq req);
}

public class AgentSummaryReq
{
public required string licensekey { get; set; }
public int accountId { get; set; }
public int divisionId { get; set; }
}

public class GetAgentListReq
{
public int accountId { get; set; }
public class Criterion
{
public required string key;
public required string operation;
public required List value;
}
public required Criterion[] searchCriteriaList { get; set; }
public required int[] divisionIds { get; set; }
public int startIndex;
public int pageSize;
public required Dictionary sorting { get; set; }
}

public class Error
{
public required string message { get; set; }
public required List detailedMessage { get; set; }
public required string errorCode { get; set; }
}

public class AgentSummary
{
public required Error error { get; set; }
public class Data
{
public required string licenseKey { get; set; }
public required string agentName { get; set; }
public int updatePreference { get; set; }
public required string stateString { get; set; }
public required string agentVersion { get; set; }
public bool updateAvailable { get; set; }
public bool publishUpgradeOption { get; set; }
public required string emailAddresses { get; set; }
}
public required Data data { get; set; }
}
public class AgentList
{
public required string error { get; set; }
public class AgentListdata
{
public required List agentList;
}
public required AgentListdata data {get;set;}
}

public class AgentInfo
{

public int agentId { get; set; }
public required string accountId { get; set; }
public required string divisionId { get; set; }
public required string hostname { get; set; }
public required string agentName { get; set; }
public required string status { get; set; }
public required string sensorName { get; set; }
public required string type { get; set; }
public required string agentLicense { get; set; }
public int updatePreference { get; set; }
public bool updateAvailable { get; set; }

}
}

И мое консольное приложение, вызывающее API:
using Microsoft.Extensions.Hosting;
using Refit;
using Digicert.Automation.API;
using Microsoft.Extensions.DependencyInjection;
using Digicert.Automation.API.Client;
using static Digicert.Automation.API.Client.GetAgentListReq;
using System.Diagnostics;

namespace ConsoleApp1
{
internal class Program
{
static async Task Main(string[] args)
{
using IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices((_, services) =>
{
services
.AddRefitClient()
.ConfigureHttpClient(c => c.BaseAddress = new Uri("https://caas.digicert.com/automationws/v1/"));
}).Build();

var automationClient = host.Services.GetRequiredService();

var sorting = new Dictionary
{
{ "AGENTNAME", "ASC" },
};
var req = new GetAgentListReq() { accountId = 1349264, searchCriteriaList = Array.Empty(), divisionIds = Array.Empty(), startIndex = 0, pageSize = 50, sorting = sorting };

var results = await automationClient.GetAgentList(req);
//var result = results.Content;
//var x = results.RequestMessage?.Content;

//if (result?.data != null && result?.data.agentList != null)
//{
// foreach (var a in result.data.agentList)
// {
// Console.Out.WriteLine(a.agentName);
// }
//}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... -correctly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»