尝试将子类添加到 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。
因为我们正在尝试设置 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。