代码之家  ›  专栏  ›  技术社区  ›  Bensonius

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

  •  0
  • Bensonius  · 技术社区  · 6 年前

    因为我们试图设置fhir通信的合作伙伴正在使用fhir模式的中间版本,所以他们正在发送并期望具有 organization 元素,而不是 managingOrganization fhir.net API所期望的。

    我已经对从业者和实践成员进行了子类划分,并使对象创建良好,所以从业者现在在我们的案例中有一个自定义的“thxpactionerRole”。没有遇到错误,我在子类中有所有的属性(见下文)。

    但是,当我序列化为XML时,结果根本没有实际错误——看起来序列化程序几乎完全忽略了它。我猜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")
                    }
                }
            };
    

    谢谢。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Mirjam Baltus    6 年前

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

        2
  •  0
  •   Bensonius    6 年前

    我的一位同事最终在Github上发现了这个项目的“问题”:

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

    因此,我最终得到了一份图书馆的副本,并按照问题线索中的建议进行了重新编译。我们现在有一个定制的图书馆。

    从这个问题:

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

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