Azure 函数对象返回未返回正确的嵌套值

Posted

技术标签:

【中文标题】Azure 函数对象返回未返回正确的嵌套值【英文标题】:Azure Function Object Return not returning correct nested values 【发布时间】:2021-11-11 00:23:27 【问题描述】:

我有一个 API 预期会返回如下结果(其中包含从 Cosmos DB 获取的数据)

public class ConsumerResponse
    
        public string ObjectId  get; set; 
        public string ConsumerType  get; set; 
        public object Data  get; set; 
    

我正在使用邮递员来测试这个 API。下面是返回 CustomerResponse 对象的 API 函数

[HttpGet]
    [Route("container/consumerType/objectId")]
    [ProducesResponseType(typeof(ConsumerResponse), (int)HttpStatusCode.OK)]
    [ProducesResponseType(typeof(ErrorResponse), (int)HttpStatusCode.BadRequest)]
    [ProducesResponseType(typeof(ErrorResponse), (int)HttpStatusCode.InternalServerError)]
    public async Task<ConsumerResponse> Get(string container , string consumerType, string objectId)
    
        var response =  await _messageProcessingService.GetAsync(container, consumerType, objectId);
        return response;
    

当我调试代码时,我可以看到映射到 CustomerResponse 类中每个属性的所有有效数据。 “数据”是嵌套对象。但是,当我在 Postman 中调用此 API 时,“Data”对象的嵌套值变为空,如下所示


    "objectId": "8bea9894-8685-46e4-8637-5614e624b05e",
    "consumerType": "Patient",
    "data": 
        "name": [
            [
                []
            ],
            [
                []
            ],
            [
                []
            ],
            [
                []
            ]
        ],
        "gender": [],
        "birthDate": [],
        "countryCode": [],
        "isActive": [],
        "consumerConsent": [],
        "accountStatus": [
            [
                [
                    []
                ]
            ]
        ]
    

但是,如果我将“数据”的数据类型更改为字符串,那么我会得到如下结果


    "objectId": "8bea9894-8685-46e4-8637-5614e624b05e",
    "consumerType": "Patient",
    "data": "\r\n  \"name\": \r\n    \"use\": \"Official\",\r\n    \"surname\": \"Dope\",\r\n    \"firstName\": \"Johny\",\r\n    \"prefix\": \"Mr.\"\r\n  ,\r\n  \"gender\": \"Male\",\r\n  \"birthDate\": \"1991-02-02\",\r\n  \"countryCode\": \"IN\",\r\n  \"isActive\": false,\r\n  \"consumerConsent\": true,\r\n  \"accountStatus\": [\r\n    \r\n      \"startDate\": \"2021-09-08T09:27:21.1946786+10:00\"\r\n    \r\n  ]\r\n"

当我使用 Object 数据类型时,如何获取嵌套结构的值?

-艾伦-

【问题讨论】:

这里没有很多工作要做。此外,您使用public object Data 进行的整个对象事情非常可疑 你能把 Object 改成该类型对象的 Class 试试看吗? 那么,只使用字符串而不是对象呢?这似乎是一个数据转换问题,这里没有太多选择可以尝试。 【参考方案1】:

您可以将所有值作为数据类型作为字符串获取,因为它获取键值对因此您可以在此处查看以转换为json check here

在 Azure 函数中,您需要添加对 NewtonSoft.JSON 的引用

Newtonsoft.Json 库是 special case。您可以通过在脚本文件的顶部添加它来包含它:

#r "Newtonsoft.Json"

using Newtonsoft.Json;

并添加以下代码行以获取 json 嵌套值。

var response = await client.GetAsync("<url>");

var json = await response.Content.ReadAsStringAsync();

var obj= JsonConvert.DeserializeObject<"Type">(json);

更多信息请参考这里link 1 & link 2

【讨论】:

以上是关于Azure 函数对象返回未返回正确的嵌套值的主要内容,如果未能解决你的问题,请参考以下文章

函数嵌套函数对象命名空间

Javascript对象在函数内返回未定义

递归 JavaScript 函数正在丢失返回值

从 Oracle 函数返回多个值

new实例化函数的过程

python中函数嵌套循环语句时,return 如何正确使用返回值