asp.net-web-api – 在asp.net web api中将HL7 FHIR序列化到json
我正在使用由Ewout Kramer创建的HL7.Fhir
nuget软件包0.9.3.
我正在使用ASP.NET Web API,但遗憾的是内置的JSON序列化不能正确生成JSON.它包含很多这样的: "<IdentifierElement>k__BackingField" 正如框架所示,此代码有效…… public HttpResponseMessage GetConformance() { var conformance = new Conformance(); var json = FhirSerializer.SerializeResourceToJson(conformance); return new HttpResponseMessage{Content = new StringContent(json)}; } 但这将变得非常重复,并且不遵循Web API的“按惯例”json / xml序列化方法. 是否有其他FHIR对象包可用,或者我应该自己编写? 解决方法
虽然较新版本的HL7.Fhir NuGet包(目前处于测试阶段)将携带额外的[DataContract]和[DataMember]属性,从而防止出现这类错误,但标准的.NET DataContract序列化程序将无法序列化 – 内存POCO是正确的FHIR XML和Json表示. FHIR序列化具有关于如何使用XML和json的特定规则,即使不是不可能,也很难使用DataContract序列化器的(有限的)可能性进行配置.
但是,也没有必要为您在codesnippet中显示的每个调用调用FhirSerializer(事实上,这将是一个WebApi反模式).例如,我们的FHIR服务器(在http://spark.furore.com/fhir)基于WebApi并使用自定义MediaTypeFormatter来处理此问题.为了了解它的外观,我们创建了两个格式化程序,一个用于json,另一个用于xml: public class JsonFhirFormatter : MediaTypeFormatter { public JsonFhirFormatter() : base() { foreach (var mediaType in ContentType.JSON_CONTENT_HEADERS) SupportedMediaTypes.Add(new MediaTypeHeaderValue(mediaType)); } } 这告诉框架这个格式化程序将采用ContentType.JSON_CONTENT_HEADERS中的任何格式(它们是application / json和一些常见的变体),并且能够解析和读取FHIR ModelTypes: public override bool CanReadType(Type type) { return type == typeof(ResourceEntry) || type == typeof(Bundle) || (type == typeof(TagList)); } public override bool CanWriteType(Type type) { return type == typeof(ResourceEntry) || type == typeof(Bundle) || (type == typeof(TagList)) || type == typeof(OperationOutcome); } 最后,您必须覆盖ReadFromStreamAsync和WriteToStreamAsync方法: public override Task WriteToStreamAsync(Type type,object value,Stream writeStream,HttpContent content,TransportContext transportContext) { // Some code left out... XmlWriter writer = new XmlTextWriter(writeStream,Encoding.UTF8); if (type == typeof(ResourceEntry)) { ResourceEntry entry = (ResourceEntry)value; FhirSerializer.SerializeResource(entry.Resource,writer); content.Headers.SetFhirTags(entry.Tags); } 现在,一旦你完成了,你的控制器就可以做到: [HttpGet,Route("metadata")] public ResourceEntry Metadata() { return service.Conformance(); } [HttpOptions,Route("")] public ResourceEntry Options() { return service.Conformance(); } 请注意,我们的服务器不使用Resources作为参数并在控制器中返回值.资源不允许您捕获重要的元数据(如id,version-id,最后修改日期等).通过在我的控制器中使用ResourceEntry,可以使用资源数据传递此数据,并且WebApi框架可以将此元数据绑定到适当的HTTP标头. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在ASP.NET中继器DataDataBound事件中访问数据源字段?
- asp.net – 我应该关心ASP .NET中的静态int(4字节)变量的线
- .net – MVC3验证:无效时更改元素类
- asp.net-web-api – 使用apicontroller对odata EntitySetCo
- ASP.NET sessionState SQLServer模式超时不起作用
- asp.net-mvc – MVC 2 jQuery验证和ajax表单
- asp.net-mvc – 运行测试项目时自动启动ASP.MVC项目
- asp.net – LINQ – ‘无法翻译表达式’与以前使用和验证的
- 如何从Asp.Net Code Behind调用JavaScript函数?
- Asp.net MVC – Jquery $.ajax错误回调没有返回responseJSO
- asp.net-mvc-2 – 使用ASP.NET MVC 2 C#4的最佳B
- asp.net – SQL Timeout过期2秒查询
- asp.net – JMeter测试ASP .NET网页有多好?
- asp.net-mvc – 属性路由和本地化问题
- asp.net – 如何使用客户端函数“OnClientClicki
- ASP.Net:如何从内容页面事件处理程序调用主页面
- asp.net-mvc-3 – 被重定向到错误loginUrl – >帐
- asp.net – 如何从身体绑定时自定义模型绑定器?
- asp.net-mvc – ASP.Net 5 project.json脚本命令
- 文件上传 – 如何解决邮递员中的文件上传错误?