尝试将子类添加到 Fhir.Net 资源并使其序列化?

Trying to add subclass to a Fhir.Net Resource and have it serialize?

因为我们正在尝试设置 FHIR 通信的合作伙伴正在使用 FHIR 模式的中间版本,他们正在发送并期待一个具有 organization 元素的 Practitioner/PractitionerRoleComponent,而不是FHIR.NET API 所期望的 managingOrganization

我已经将 Practitioner 和 PractitionerRoleComponent 子类化并使对象创建良好,因此 Practitioner 现在在我们的案例中有一个自定义 "THXPractitionerRole"。没有遇到任何错误,我在子类中设置了所有属性(见下文)。

但是,当我序列化到 XML 时,结果根本没有 PractitionerRole —— 序列化程序似乎完全忽略了它。我猜 FHIR.Net 序列化程序有某种检查以确保它们只序列化有效的 FHIR 类型?或者子类中是否缺少任何可能阻止它工作的东西?

我说的API在这里:https://github.com/ewoutkramer/fhir-net-api/tree/develop

目标是能够在结果 XML/Json 中包含一个 Practitioner/practitionerRole/organization 元素。

[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")
                }
            }
        };

谢谢。

由于没有正式的 FHIR 版本可以满足您的需求,因此没有您可以使用的库版本,我们认为您最好的选择是分叉库的源代码(请参阅 https://github.com/ewoutkramer/fhir-net-api).然后,您可以查找其他资源以查看其组件的代码,并更改 Practitioner 以包含 PractitionerRoleComponent。构建解决方案,您将能够将其用作您的库而不是官方库。

我的一位同事最终在 GitHub 上为该项目找到了这个 "issue":

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

所以,我最终复制了一份库,并按照问题线程中建议的想法重新编译。我们现在有一个自定义库。

来自问题:

the only way to handle custom resources currently is to create a StructureDefinition for it, add it to the profiles-resources.xml file in the Model/Source directory, and rerun the T4 templates - you'll get your own version of the .NET library, with a POCO for your own resources....

我这样做了,不得不通过 Visual Studio 中的 Run Custom Tool 上下文菜单选项在 运行 Template-Model.tt 之前删除 Generated/Practitioner.cs 文件。完成后,Practitioner.cs 文件与我们的 new/custom 资源一起生成,图书馆能够将其序列化为我们需要的 XML。