Пытаетесь добавить подкласс в ресурс Fhir.Net и его сериализацию? - PullRequest
0 голосов
/ 05 января 2019

Поскольку партнер, которого мы пытаемся настроить для связи FHIR, использует промежуточную версию схемы FHIR, он отправляет и ожидает объект Practitioner / PractitionerRoleComponent с элементом organization вместо managingOrganization, который Ожидается API FHIR.NET.

Я вложил в подклассы Practitioner и PractitionerRoleComponent и получил объекты, создающие штрафа, поэтому у Practitioner теперь есть собственный THXPractitionerRole в нашем случае. Ошибок не обнаружено, у меня есть все атрибуты в подклассе (см. Ниже).

Однако, когда я сериализуюсь в XML, результаты вообще не имеют значения PractitionerRole - кажется, что сериализатор просто полностью его игнорирует. Я собираюсь предположить, что сериализаторы FHIR.Net имеют какую-то проверку, чтобы убедиться, что они только сериализуют действительные типы FHIR? Или я что-то упускаю из подкласса, который может мешать его работе?

API, о котором я говорю, находится здесь: https://github.com/ewoutkramer/fhir-net-api/tree/develop

Цель состоит в том, чтобы иметь возможность иметь элемент Practitioner / PractitionerRole / Organization в результирующем XML / Json.

[FhirType("Practitioner", IsResource = true)]
[DataContract]
public partial class THXPractitioner : Hl7.Fhir.Model.Practitioner, System.ComponentModel.INotifyPropertyChanged
{
    [FhirElement("practitionerRole", Order = 170)]
    [Cardinality(Min = 0, Max = -1)]
    [DataMember]
    public List<THXPractitionerRoleComponent> THXPractitionerRole
    {
        get { if (_PractitionerRole == null) _PractitionerRole = new List<THXPractitionerRoleComponent>(); return _PractitionerRole; }
        set { _PractitionerRole = value; OnPropertyChanged("PractitionerRole"); }
    }
    private List<THXPractitionerRoleComponent> _PractitionerRole;


    [FhirType("PractitionerRoleComponent")]
    [DataContract]
    public partial class THXPractitionerRoleComponent : Hl7.Fhir.Model.Practitioner.PractitionerRoleComponent, System.ComponentModel.INotifyPropertyChanged, IBackboneElement
    {
        [NotMapped]
        public override string TypeName { get { return "PractitionerRoleComponent"; } }

        /// <summary>
        /// Organization where the roles are performed
        /// </summary>
        [FhirElement("organization", Order = 40)]
        [References("Organization")]
        [DataMember]
        public ResourceReference organization
        {
            get { return _organization; }
            set { _organization = value; OnPropertyChanged("organization");}
        }

        private ResourceReference _organization;
}

Вот как это называется:

fhirpractitioner.THXPractitionerRole = new List<Model.THXPractitioner.THXPractitionerRoleComponent>()
        {
            new Model.THXPractitioner.THXPractitionerRoleComponent()
            {
                Extension = new List<Extension>()
                {
                      new Extension()
                      {
                          Url = "[My Url]",

                      }
                },
                organization = new ResourceReference()
                {
                     Reference = "asdfasfd"
                     ,Display = "organization"
                     ,DisplayElement= new FhirString("organization")
                }
            }
        };

Спасибо.

Ответы [ 2 ]

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

Мой коллега обнаружил эту «проблему» на GitHub для проекта:

https://github.com/ewoutkramer/fhir-net-api/issues/337

Итак, в итоге я взял копию библиотеки и следовал идеям, предложенным в ветке выпуска, и перекомпилировал. Теперь у нас есть пользовательская библиотека.

Из вопроса:

в настоящее время единственный способ обработки пользовательских ресурсов - создать для него StructureDefinition, добавить его в файл profile-resources.xml в каталоге Model / Source и повторно запустить шаблоны T4 - вы ' Я получу вашу собственную версию библиотеки .NET, с POCO для ваших собственных ресурсов ....

Я сделал это, мне пришлось удалить файл Generated / Practitioner.cs перед запуском Template-Model.tt через параметр контекстного меню Run Custom Tool в Visual Studio. После этого файл Practitioner.cs был сгенерирован с нашим новым / нестандартным ресурсом, и библиотека смогла сериализовать его в нужный нам XML.

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

Поскольку не существует официального релиза FHIR, в котором есть то, что вам нужно, и, следовательно, нет версии библиотеки, которую вы можете использовать, мы считаем, что лучшим вариантом будет форкать исходный код библиотеки (см. https://github.com/ewoutkramer/fhir-net-api). Затем вы можете найти другие ресурсы, чтобы увидеть код для их компонентов, и изменить практикующего специалиста для включения PractitionerRoleComponent. Постройте решение, и вы сможете использовать его в качестве своей библиотеки вместо официальной.

...