context.GetInput <model>возвращает базовый класс вместо указанного производного класса в $ Type - PullRequest
0 голосов
/ 07 ноября 2019

Используя функции Azure Durable, я пытаюсь использовать функцию context.GetInput<model>(), которая возвращает указанную модель. Используемая модель имеет параметр, который является другой моделью, являющейся производным классом. Модель, которая выводится из context.GetInput<model>(), возвращает модель с базовым классом вместо производного класса.

Я проверил тип $, указанный в контексте, который показывает производный класс, но при проверке выведенной модели результатом является базовый класс.

например:

public class Student{
   public Book book {get;set;}
}
public class Textbook:Book {
   public string classfor {get;set;}
}
public class Book {
   public string title {get;set;}
}

[ActivityTrigger] DurableActivityContextBase context - это параметр функции.

Тогда я бы позвонил:

var model = context.GetInput<Student>()

, где контекст включает

{
  "$type": "Student",
    "book" : {
       "$type": "Textbook",
       "classfor" : "Math",
       "title" : "PreAlgebra"
    }
}

И все же результатом является Модель ученика, которая содержит книгу вместо учебника, где названию присваивается «PreAlgebra»

Я ожидаюВыходные данные модели Студента должны иметь Учебник со свойствами:

title = "PreAlgebra"
classfor = "Math"

, но фактический вывод Студента содержит Книгу со свойством

title = "PreAlgebra"

1 Ответ

0 голосов
/ 08 ноября 2019

Насколько я понимаю, класс Учебник расширяет Книгу, поэтому «Книга» является родительским классом, а «Учебник» - подклассом. В вашем контексте вы хотите превратить дочерний класс (Учебник) в родительский класс (Книга). После этого «book» будет просто иметь атрибут «title», который является их общим атрибутом, но не имеет специального атрибута «classfor» . Вы можете сослаться на код ниже:

enter image description here

...