HL7 FHIR 在 asp.net web api 中序列化为 json

2023-11-27

我正在使用 HL7.Fhirnuget由 Ewout Kramer 创建的软件包 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 序列化程序的(有限)可能性来配置这即使不是不可能,也是很困难的。

但是,也没有必要为每个调用调用 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();
}

请注意,我们的服务器不使用资源作为控制器中的参数和返回值。资源不允许您捕获重要的元数据(如 ID、版本 ID、上次修改日期等)。通过在我的控制器中使用 ResourceEntry,此数据可以与资源数据一起传递,并且 WebApi 框架可以将此元数据绑定到适当的 HTTP 标头。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HL7 FHIR 在 asp.net web api 中序列化为 json 的相关文章

  • WebApi 强制操作返回 xml

    我有这个动作 public IHttpActionResult SearchFor int aboItemType DTO FilterColumns filter Do stuff return Ok
  • 如何在 dotnet core web api 中设置起始页?

    我尝试使用 dotnet core web api 构建一个 web 应用程序 但我不知道如何将 index html 设置为起始页 这可以使用 dotnet Framework Web api 轻松完成 我尝试使用app UseDefau
  • Web API 通用操作

    我有一个 http 操作 需要采用两个不同的对象模型 实现查看两个模型对象并知道此时要做什么 我可以使用通用对象吗 HttpPost public IHttpActionResult InsertData string accessKey
  • Swagger WebApi 在构建时创建 json

    有什么方法可以在我的 Web api 的构建任务期间创建 swagger json 吗 我想使用 json 将其输入代码生成器并生成打字稿定义文件 非常欢迎任何帮助 我在用着虚张声势 AspNetCore Cli 注意 我使用的是 NET
  • 找不到方法:'System.Net.Http.HttpRequestMessage System.Web.Http.Controllers.HttpActionContext.get_Request()'

    我创建了一个过滤器属性 public class AuthFilterAttribute System Web Http Filters ActionFilterAttribute public AuthFilterAttribute pu
  • 在 ASP.NET 自托管 Web API 上配置 SSL

    我正在创建自托管 Web API 服务 为了确保它的安全 我研究并实施了this http www codeproject com Articles 630986 Cross Platform Authentication With ASP
  • 有 PayPal IPN 的示例吗

    我有一个 Asp Net WEB API 2 项目 我想实现一个即时付款通知 IPN 侦听器控制器 我找不到任何示例和 nuget 包 我所需要的只是确认用户使用 Paypal 上的标准 html 按钮付款 这很简单 所有 nuget 包都
  • 如何通过 FHIR REST api (HAPI) 添加配置文件

    我查看了为 FHIR 创建配置文件的文档 并且使用 Forge 创建了一些我认为对于描述配置文件有效的 xml 我在文档中找不到实际说明我需要向 RESTful api 发出什么请求才能实际添加新配置文件 有任何想法吗 您当然可以通过以下方
  • ASP NET Web API 路由模板

    我有一个名为 Agency 的实体 具有以下 api GET http localhost 37331 api agency start 1 limit 10 status 1 GET http localhost 37331 api ag
  • asp.net web api 中具有两个参数的方法

    如何使用 ASP NET Web Api 创建具有两个参数的方法 这样我就可以像 localhost controller param1 param2 那样调用它 您还可以在查询字符串中使用特定参数名称来调用 url api actions
  • APIController“执行”方法?

    In an ApiController操作 我需要在操作完成执行后立即关闭与数据库的连接 在控制器下我重写OnActionExecuted来实现这一目标 我将如何在ApiController action Thanks 你可以覆盖Execu
  • 如何强制 Web API 识别查询字符串参数

    ASP NET MVC4 Web API v1 控制器定义如下 它应该接受 1 或 2 个查询字符串参数 然而 如果调用方法 ko 参数始终为 null 请求如下 如何修复以便 kclient 或 namepart 参数可以在查询字符串中传
  • HTTP 403 Forbidden:访问被拒绝 ASP.NET Web API

    在生产服务器上运行 ASP NET Web API 项目时 我收到以下错误 403 禁止 访问被拒绝 您没有权限查看 使用您提供的凭据访问此目录或页面 查看 IIS 7 0 错误日志 基本错误是 403 14 目录列表被拒绝 我已经配置了生
  • Asp.Net Core 挑战返回 Null URI 异常错误

    我正在创建 ASP NET Core Web API 并希望集成 Microsoft Azure AD 身份验证服务 在编译时一切正常 但是 当我访问旨在返回挑战的路由时 我收到一个 null URI 异常 下面的 Stacktrace 我
  • Angular 6 Asp.Net(非 Core)Web Api CORS 请求失败

    我正在构建一个 Net Web Api 它将由 Angular 6 客户端使用 但出于某种原因 我无法使其在我的开发环境中工作 我从一个非常简单的 Web Api 开始 它只返回一个字符串 用于前端和后端测试目的之间的通信 GET api
  • 允许 .NET WebApi 忽略 DOCTYPE 声明

    我正在尝试通过 WebApi 方法将 XML 反序列化为对象 我有以下课程 XmlRoot IsNullable false public class MyObject XmlElement Name public string Name
  • Web API 的 ASP.NET MVC Core 控制器 PATCH 方法

    给定一个数据库表 Person 包含 3 列 Id 名字和姓氏 使用真实的 DbContext 时 ASP NET Core Web API MVC 控制器方法 PATCH 仅修改姓氏 看起来如何 我根本不知道如何实现它 并且找不到相关教程
  • ASP.NET Web API 依赖注入

    我想知道是否可以在 ASP NET Web API 中进行依赖项注入 自定义构造函数 而无需使用第三方库 例如 Unity 或 StructureMap 且无需实体框架 我想要实现的是拥有一个带有构造函数的控制器 例如 public Con
  • asp.net web api 自托管/owin/katana

    我对自托管有多个问题 自托管 Nuget 有 2 个 nuget 提供自托管 Microsoft AspNet WebApi OwinSelfHost and Microsoft AspNet WebApi SelfHost 那么微软有2种
  • 为什么 CastleWindsor 的 BeginScope 超出范围?

    我正在尝试将温莎城堡添加到我的 Web API 项目中 并且正在关注这个帖子 http blog kerbyyoung com 2013 01 setting up castle windsor for aspnet html commen

随机推荐

  • 删除所有文件和文件夹但排除子文件夹

    我有一个文件夹 需要删除除一小部分文件和文件夹之外的所有文件和文件夹 我已经可以排除文件列表 但没有找到排除文件夹及其内容的方法 这是文件夹结构 C temp C temp somefile txt C temp someotherfile
  • 在字符串内包含引号?

    我正在尝试将引号包含在字符串中以添加到文本框 我正在使用此代码 t AppendText Dim Choice count As String Your New Name is pt1 pt2 vbNewLine 但它不起作用 我希望它像这
  • 从大型数据集中随机采样

    我从一个大型数据库中提取了研究人群 为了进行比较 我想选择一个具有相似特征的对照组 我想要匹配的两个标准是年龄和性别 为我提供用于匹配目的的数字的查询是 select sex age 10 as decades COUNT as count
  • URL/子域重写 (htaccess)

    假设我有以下文件 http www example com images folder image jpg 我想把它放在 http s1 example com folder image jpg 我如何进行 htaccess 重写以将其指向
  • GAE交易失败和幂等性

    Google App Engine 文档包含以下段落 注意 如果您的应用程序在提交时收到异常 交易失败并不总是意味着交易失败 你 可以接收DatastoreTimeoutException ConcurrentModificationExc
  • Linq2SQL 处理具有唯一约束的表上的插入/删除

    我有一个如下所示的表 TABLE Foo Guid Id PK int A FK int B FK int C FK 以及对 A B 和 C 的唯一约束 现在举例来说 您插入带有新 PK 的行 其中 A 1 B 1 C 1 SubmitCh
  • 在单个谱系中变基多个分支的最简单方法

    我有两个分支位于上游 主控之上 一个分支以另一个为祖先 因此它们形成一条线 U1 upstream master A B fixes C D features 随后 upstream master 继续前进 U1 U2 upstream m
  • 使用 Flex 编写可重入词法分析器

    我是弯曲的新手 我正在尝试使用 Flex 编写一个简单的可重入词法分析器 扫描器 词法分析器定义如下 我遇到编译错误 如下所示 yyg 问题 可重入 l Definitions digit 0 9 letter a zA Z alphanu
  • 没有打印语句就不会执行代码[重复]

    这个问题在这里已经有答案了 我一直在制作一个倒计时程序 我想出了这个 package main import java awt FlowLayout import java awt event ActionEvent import java
  • 无法在 Azure DevOps 管道中激活 conda

    在 conda 构建的 python 项目上测试 azure devops 管道 jobs job pre build setup displayName Pre Build Setup pool vmImage ubuntu 18 04
  • 析构函数有符合标准的名称吗?

    根据标准 类析构函数是否有迂腐意义上的名称 回想一下 构造函数明确没有名称 12 1 1 构造函数没有名字 A 使用特殊声明符语法 可选序列 后面是函数说明符 7 1 2 通过构造函数的类名 随后使用参数列表 声明或定义构造函数 在这样的声
  • 如何拦截粘贴到 NSTextView 中以删除不支持的格式?

    我正在尝试创建一个简单的基于 NSTextView 的窗口 以进行简单的所见即所得编辑 但是 我只想允许某些类型的格式 例如粗体 斜体 下划线和单个标题类型 但没有颜色或不同的字体 问题是 如果我只是使用 NSTextView 有人可以在另
  • iOS 推送通知 - 更新徽章而不发出警报?

    有没有办法在不显示警报或打开应用程序的情况下更新徽章中的数字 我正在编写一个应用程序 它应该始终在图标徽章中显示当前未读消息的数量 但我想这样做而不向用户显示任何警报 我正在为 iOS 5 0 进行开发 编辑 为了更清楚 我正在询问一种方法
  • Java String.replaceAll 正则表达式

    使用 java 删除输入字符串 如 MY CORP My Name 的 MY CORP 部分的正则表达式是什么String replaceAll方法 这样我只能获取 My Name 部分 I tried public static Stri
  • OpenCV:如何从以太网摄像头捕获帧

    我之前对 USB 网络摄像头进行了编程 其唯一目的是从摄像头获取实时帧并显示在窗口中 我使用 cvCaptureFromCAM 来实现此目的 它对于 USB 摄像头效果很好 请参见下面的代码 我想知道如何从千兆以太网摄像头捕获帧 我想我需要
  • C++ 中的重写删除应如何表现?

    我遇到的问题是 据我所知 删除运算符应该是静态函数 但有时编译器 VC 似乎将其视为动态函数 Given class Base public void operator new size t size allocate from custo
  • PHP:使用自动加载器时如何获取所有类

    我正在使用 Composer 生成自动加载器 autoload psr 4 SomeNamespace src SomeDir 我需要创建实现特定接口的所有类的实例 这相当容易但是 当不使用自动加载器时get declared classe
  • Jquery 使用数组中的数据创建选择标签

    我需要访问数据库并更新选择标签的选项 我的代码在这里 window load function getJSON http localhost ABC web app dev php doctorFillOption function dat
  • Silverlight:组合框中的默认值

    我想在组合框中显示默认文本 例如 选择一个人 消息 你能帮我一下吗 请注意 我正在使用域上下文中的数据绑定 谢谢 为了实现这一点 我使用了派生的ExtendedComboBox扩展内置类ComboBox班级 您可以在以下位置找到该类的源代码
  • HL7 FHIR 在 asp.net web api 中序列化为 json

    我正在使用 HL7 Fhirnuget由 Ewout Kramer 创建的软件包 0 9 3 我将其与 ASP NET Web API 绑定在一起 但不幸的是内置的 JSON 序列化无法正确生成 JSON 它包含很多这样的内容