Проблема У меня есть приложение C# Durable Azure Functions (v2), содержащее функцию оркестровки и активности.
Оркестровка вызывает действие следующим образом:
propBag.CE = await context.CallActivityAsync<CEData>(nameof(GetCEByExternalIdActivity), propBag);
Вызов работает нормально, и функция Activity выполняется, создает содержимое для propBag.CE и возвращает.
Объект CE содержит несколько других объектов, в том числе:
public List<IParty> Individuals { get; set; }
public List<IParty> Organisations { get; set; }
Эти свойства назначаются следующим образом:
consPort.Individuals = await GetParties(clientRel.RelatedIndividuals, CEEntityType.Individual);
consPort.Organisations = await GetParties(clientRel.RelatedOrganisations, CEEntityType.Organisation);
Тот факт, что он содержит интерфейс, по-видимому, дает долговечные функции время выполнения проблема. Когда он пытается десериализовать значение, возвращаемое функцией действия, я получаю следующую ошибку:
Не удалось создать экземпляр типа Interfaces.Avaloq.Application.Models.CE.IParty. Тип - это интерфейс или абстрактный класс, и его нельзя создать.
Кто-нибудь знает, как это исправить? Может быть, есть способ настроить, как функция будет пытаться десериализовать json?
Обходной путь Я решил проблему, изменив класс, чтобы он содержал списки конкретных типов IParty следующим образом:
public List<Individual> Individuals { get; set; }
public List<Organisation> Organisations { get; set; }
Затем я должен был убедиться, что я привел к конкретному типу из IParty, прежде чем назначать эти свойства, следующим образом:
var myList = (await GetParties(clientRel.RelatedIndividuals, CEEntityType.Individual));
foreach (var party in myList)
{
consPort.Individuals.Add((Individual)party);
}
myList = (await GetParties(clientRel.RelatedOrganisations, CEEntityType.Organisation));
foreach (var party in myList)
{
consPort.Organisations.Add((Organisation)party);
}
Не очень красиво, но меня вокруг проблемы.