试图将子类添加到Fhir.Net资源并进行序列化?

时间:2019-01-04 22:09:40

标签: c# .net api serialization hl7-fhir

由于我们正在尝试建立FHIR通信的合作伙伴正在使用FHIR架构的中间版本,因此他们正在发送并期望具有organization元素而不是{{1}元素的Practitioner / PractitionerRoleComponent }}是FHIR.NET API所期望的。

我已经将Practitioner和PractitionerRoleComponent分为子类,并且可以很好地创建对象,因此在我们的案例中,Practitioner现在有一个自定义的“ THXPractitionerRole”。没有遇到错误,我在子类中拥有所有属性(请参见下文)。

但是,当我序列化为XML时,结果根本没有PractitionerRole -似乎序列化器似乎完全忽略了它。我猜想FHIR.Net序列化器会进行某种检查,以确保它们仅序列化有效的FHIR类型?还是子类中缺少任何可能阻止其工作的东西?

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

目标是能够在生成的XML / Json中具有Practitioner / practitionerRole / organization元素。

managingOrganization

在这里被称为:

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

谢谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我的一位同事最终在GitHub上找到了该项目的“问题”:

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

因此,我最终制作了一个库的副本,并按照问题线程中提出的想法进行了重新编译。现在,我们有了一个自定义库。

从问题开始:

  

当前处理自定义资源的唯一方法是为其创建一个StructureDefinition,将其添加到 Model / Source 目录中的profiles-resources.xml文件中,然后重新运行T4模板-您将获得您自己的.NET库版本,并为您自己的资源提供POCO。...

我这样做了,必须通过Visual Studio中的Template-Model.tt上下文菜单选项运行Run Custom Tool之前,必须删除Generated / Practitioner.cs文件。完成后,将使用我们的新/自定义资源生成Practitioner.cs文件,并且库能够将其序列化为我们所需的XML。