Asp.net core FHIR&x27;从.NET内核中的JSON解析通用数据类型对象

Asp.net core FHIR&x27;从.NET内核中的JSON解析通用数据类型对象,asp.net-core,types,hl7-fhir,jsonparser,fhir-net-api,Asp.net Core,Types,Hl7 Fhir,Jsonparser,Fhir Net Api,我在项目中使用的库是一个API包装器(在ASP.NETCore2.2中)。 在视图模型中,我将FHIR元素()声明为属性。例如: public class MyPatient { public string Name { get; set;} public Hl7.Fhir.Model.CodeableConcept MaritalStatus { get; set;} //This is

我在项目中使用的库是一个API包装器(在ASP.NETCore2.2中)。 在视图模型中,我将FHIR元素()声明为属性。例如:

public class MyPatient
{
    public string Name { get; set;}
    public Hl7.Fhir.Model.CodeableConcept MaritalStatus { get; set;} //This is 
                                                          //defined in the library
} 
现在,问题是:'MaritalStatus'没有正确地从json解析到c#object()(即它只是'notnull')。也没有任何异常被抛出

详细说明: 这是我从前端收到的JSON:

 { 
   "name": "TheName", 
   "maritalStatus": {
      "coding": [ 
         { 
           "system": "terminology.hl7.org/CodeSystem/v3-MaritalStatus", 
           "code": "U", 
           "display": "unmarried"
         } 
       ], 
      "text": "Unmarried" 
    } 
}

public class MyPatient
{
    public string Name { get; set;}
    public Hl7.Fhir.Model.CodeableConcept MaritalStatus { get; set;}
} 
这是我的模型(C#类),与我从前端收到的JSON相对应:

 { 
   "name": "TheName", 
   "maritalStatus": {
      "coding": [ 
         { 
           "system": "terminology.hl7.org/CodeSystem/v3-MaritalStatus", 
           "code": "U", 
           "display": "unmarried"
         } 
       ], 
      "text": "Unmarried" 
    } 
}

public class MyPatient
{
    public string Name { get; set;}
    public Hl7.Fhir.Model.CodeableConcept MaritalStatus { get; set;}
} 
这是控制器处理请求的操作(在包装层-我的项目中):

        [HttpPut("{id}")]
        [Consumes("application/json")]
        [Produces("application/json")]
        public async Task<ActionResult> Update([Required][FromRoute] string id,[Required][FromBody] MyPatient myPatient)
        {
            if (ModelState.IsValid)
            {

               Hl7.Fhir.Model.Patient patient = await _fhirClient.ReadAsync<Patient>(location: "Patient/" + id);

               patient.MaritalStatus = myPatient.MaritalStatus;

               patient.Name[0].Text = myPatient.Name;

               patient = await _fhirClient.UpdateAsync<Patient>(patient);

               return Ok();

            }//ends If ModelState.IsValid

            return BadRequest();
        }//ends Update
[HttpPut(“{id}”)]
[使用(“应用程序/json”)]
[产生(“应用程序/json”)]
公共异步任务更新([Required][FromRoute]字符串id,[Required][FromBody]MyPatient MyPatient)
{
if(ModelState.IsValid)
{
Hl7.Fhir.Model.Patient-Patient=wait _fhirClient.ReadAsync(位置:“Patient/”+id);
patient.MaritalStatus=myPatient.MaritalStatus;
patient.Name[0]。Text=myPatient.Name;
患者=等待_fhirClient.UpdateAsync(患者);
返回Ok();
}//如果ModelState.IsValid有效,则结束
返回请求();
}//结束更新

首先,您的实例不是有效的FHIR。您需要遵守FHIR规范中定义的语法,并且患者的“姓名”不是一个简单的字符串。此外,还需要声明resourceType。这不是可选的。第二,如果你想使用官方的类库,你不能去发明你自己的类并期望它们神奇地工作——使用内置的解析器。即使只有两个元素(加上resourceType),也没有问题。

您提到使用.Net Core的默认JSON转换器,所以我假设这是System.Text.JSON中的一个

问题不在于FHIR库,因为它完全能够将FHIR json正确解析为FHIR对象。因此,您必须查看用于自定义类的JSON转换器,并让它将JSON正确解析到类对象中。从这个角度看,我认为问题在于案例不匹配。指示属性名称匹配区分大小写。FHIR属性使用驼峰大小写,但FHIR模型的属性以大写开头。要解决此问题,请设置序列化属性,并将其用于反序列化:

        var serializerOptions = new JsonSerializerOptions
        {
            PropertyNameCaseInsensitive = true
        };

        var myPatient = JsonSerializer.Deserialize<MyPatient>(json, serializerOptions);
var serializerOptions=新的JsonSerializerOptions
{
PropertyNameCaseSensitive=true
};
var myPatient=JsonSerializer.Deserialize(json,serializerOptions);

你能详细说明一下你在做什么吗?您是如何解析的,json是什么样子的?当你说你在使用官方图书馆时,为什么不解析到一个普通的FHIR患者对象?你为什么需要“我的病人”课程。我需要在Azure FHIR Db中更新患者FHIR资源。我从前端获取JSON格式的“maritalStatus”对象,JSON.NET(.NET内核中的默认JSON解析器)将该对象解析为C#对象(类型:CodeableConcept)。然后我将这个C#对象的引用存储在检索到的FHIR资源Patient.MaritalStatus中。最后,我对Azure FHIR服务器进行更新调用,以获取这个本地更新的对象。2.我正在使用.NETCore中的默认JSON转换器进行解析。3.我需要允许用户只部分更新patient对象(即“MaritalStatus”)。json看起来像:{“name”:“TheName”,“MaritalStatus”:{“coding”:[{“system”:”,“code”:“U”,“display”:“未婚”}],“text”:“未婚”}}我只需要解析类型为“CodeableConcept”的“maritalStatus”,它是从包装层的前端获取的。因此,不可能将其解析为整个患者FHIR对象@MirjamBaltusI请求您再次阅读问题和评论。很抱歉,但我认为你的回答一点也不相关。整个问题实际上是关于在Azure FHIR服务器的包装层中视图模型和FHIR域模型之间的映射。我的评论是关于您的JSON-它不是有效的FHIR。(如果您想验证,请尝试将其发布到任何公共FHIR测试服务器上。)因此,解析器出现问题也就不足为奇了。此外,您的代码snippit似乎没有执行任何映射。这只是定义一个新类。我已经对这个问题进行了足够的说明。我希望你现在能理解,你的回答是不相关的。谢谢