如何将 JSON 反序列化为 .net 中的 FHIR 值集资源

Mat*_*t C 1 c# hl7-fhir

我在将值集扩展的响应转换为 c# 中的值集资源对象时遇到问题。

我目前正在使用 RestSharp,REST 调用成功,以下输出预期的 JSON。

IRestResponse response = client.Execute(request);
var result = JsonConvert.DeserializeObject(response.Content);
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)

我试过了

var result = JsonConvert.DeserializeObject<ValueSet>(response.Content);
Run Code Online (Sandbox Code Playgroud)

但它会产生一个空对象。我确定我犯了一些菜鸟错误,也许应该考虑使用 Hl7.Fhir.Rest 而不是 RestSharp?

gra*_*der 5

首先,你应该检查一下

用于与 FHIR 兼容服务器配合使用的 REST 客户端;

https://www.nuget.org/packages/Hl7.Fhir.R4/4.3.0

(以及此处通过单元测试的“示例”)

https://github.com/FirelyTeam/firely-net-sdk/blob/release/4.0.0-r4/src/Hl7.Fhir.Core.Tests/Rest/FhirClientTests.cs

你应该非常努力地使用上面的内容。它避免了“重新发明轮子综合症”,特别是“不快乐的路径”以及fhir服务器如何处理分页。

但是,如果您不遵循上述建议:

您可以使用 HttpClient 和https://www.nuget.org/packages/Hl7.Fhir.DSTU2/ (或https://www.nuget.org/packages/Hl7.Fhir.STU3/)(或https:// www.nuget.org/packages/Hl7.Fhir.R4/)(或最新的)

using System;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

/* magic ones */
using Hl7.Fhir.Serialization;
using Hl7.Fhir.Model;

        string url = "https://www.somebody.com/FHIR/api/Patient?given=Jason&family=Smith";

        HttpClient client = new HttpClient();
        {
            using (HttpResponseMessage response = await client.GetAsync(url))
            {
                using (HttpContent content = response.Content)
                {
                    string responseString = await content.ReadAsStringAsync();
                    response.EnsureSuccessStatusCode();

                    /* Hl7.Fhir.DSTU2  \.nuget\packages\hl7.fhir.dstu2\0.96.0 */

                    FhirJsonParser fjp = new FhirJsonParser(); /* there is a FhirXmlParser as well */
                    /* You may need to Parse as something besides a Bundle depending on the return payload */
                    Hl7.Fhir.Model.Bundle bund = fjp.Parse<Hl7.Fhir.Model.Bundle>(responseString);
                    if (null != bund)
                    {
                        Hl7.Fhir.Model.Bundle.EntryComponent ec = bund.Entry.FirstOrDefault();
                        if (null != ec && null != ec.Resource)
                        {
                            /* again, this may be a different kind of object based on which rest url you hit */
                            Hl7.Fhir.Model.Patient pat = ec.Resource as Hl7.Fhir.Model.Patient;
                        }
                    }

                }

            }
        }
Run Code Online (Sandbox Code Playgroud)