当前位置: 首页 > 知识库问答 >
问题:

是否可以将return(item1、item2、item3、item4、item5)重命名为其他名称?

霍书
2023-03-14

我想将名称item1、item2、item3、item4、item5更改为FunctionSuccessful、Errorline1、Errorline2、Errorline3、Errorline4。我该怎么做?

我的代码不能像预期的那样工作,因为它仍然在客户端代码中返回item1,item2,item3,item4,item5,而不是新名称Function成功,错误线1,错误线2,错误线3,错误线4:

我应该在Azure函数中更改什么,以便它在客户端代码中返回新的名称Function成功、错误线1、错误线2、错误线3、错误线4?

Azure功能:

    [FunctionName("AddUsernamePasswordEmailToAccount")]
    public static async Task<dynamic> NewCall(
        [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestMessage req, ILogger log)
    {
        // ...

        bool functionsuccessful = false;
        string errorline1 = string.Empty;
        string errorline2 = string.Empty;
        string errorline3 = string.Empty;
        string errorline4 = string.Empty;

        var result = await clientAPI.AddUsernamePasswordAsync(request);
        if (result.Error != null)
        {
            var errors = OnPlayFabError(result.Error, language);
            errorline1 = errors[0];
            errorline2 = errors[1];
            errorline3 = errors[2];
            errorline4 = errors[3];
        }
        else
        {
            functionsuccessful = true;
        }

        return (FunctionSuccessful: functionsuccessful, Errorline1: errorline1, Errorline2: errorline2, Errorline3: errorline3, Errorline4: errorline4);
    }

客户代码:

            Dictionary<string, object> dic = PlayFabSimpleJson.DeserializeObject<Dictionary<string, object>>(result.Result.FunctionResult.ToString());
            if (dic.TryGetValue("FunctionSuccessful", out object a))
            {
                addedcredentials = (bool)a;
            }
            if (dic.TryGetValue("Errorline1", out object b))
            {
                errorline1 = (string)b;
            }
            if (dic.TryGetValue("Errorline2", out object c))
            {
                errorline2 = (string)c;
            }
            if (dic.TryGetValue("Errorline3", out object d))
            {
                errorline3 = (string)d;
            }
            if (dic.TryGetValue("Errorline4", out object e))
            {
                errorline4 = (string)e;
            }

共有2个答案

谷梁博易
2023-03-14

我希望你身体好。您可以使用一种简单的策略,对字符串进行编码,其中第一个字符就是代码。

编码:用代码表示的字符串

0:成功

1:错误行1。客户端异常1。。。。

2:错误第2行。客户端异常2......

3:错误行3。客户端异常3。。。。

4:错误行4。客户端异常4。。。。

在客户端,首先检查代码,字符串的第一个字符。

字符串结果=s1。子串(0,1);

并应用Swicth结构。。

艾照
2023-03-14

使用所需的属性创建自己的类型,并返回该类型。

public class Result
{
    public bool FunctionSuccessful { get; set; }
    public string Errorline1 { get; set; }
    public string Errorline2 { get; set; }
    public string Errorline3 { get; set; }
    public string Errorline4 { get; set; }
}

以及:

return new Result
{
    FunctionSuccessful = functionsuccessful,
    Errorline1 = errorline1,
    Errorline2 = errorline2,
    Errorline3 = errorline3,
    Errorline4 = errorline4
};

我玩了一会儿这个,因为我可以重现你的问题,我发现了一些有趣的事情。

首先,它这样做的原因是Azure函数运行时依赖于Newtonsoft。Json,而正是这个包序列化了响应。此外,如果您阅读了元组文档,您将看到:

元组字段的默认名称是Item1Item2Item3等等。您始终可以使用字段的默认名称,即使在显式指定或推断字段名称时也是如此

依赖这些默认名称可能会使支持元组的库更加简单。如果您在Newtonsoft上阅读了此问题。Jsonrepo,您将看到一个讨论,其中人们对实现命名元组字段的成本持怀疑态度,因为他们认为不值得努力。

因此,为了清楚起见,我可以在一个简单的控制台应用程序中重现您的问题:

using Newtonsoft.Json;

static void Main(string[] args)
{
    var functionsuccessful = true;
    var errorline1 = "error 1";
    var errorline2 = "error 2";
    var errorline3 = "error 3";
    var errorline4 = "error 4";

    var result = (FunctionSuccessful: functionsuccessful, 
        Errorline1: errorline1, 
        Errorline2: errorline2, 
        Errorline3: errorline3, 
        Errorline4: errorline4);
    var serialised = JsonConvert.SerializeObject(result);

    Console.WriteLine(serialised);
}

产生以下输出:

{
    "item1": true,
    "item2": "error 1",
    "item3": "error 2",
    "item4": "error 3",
    "item5": "error 4"
}

但我发现有趣的是,使用系统序列化。文本Json

serialised = System.Text.Json.JsonSerializer.Serialize(result);
Console.WriteLine(serialised);

生产:

{}

我无法解释。我不太愿意称之为bug,但我绝对没想到会是这样。

编辑:在查看了Seabizkit的注释后,System还不支持ValueTuple。文本。Json,正如这个GitHub问题所确认的,应该为其添加。NET 5.

 类似资料:
  • 问题内容: 我正在寻找一种重命名Hashmap密钥的方法,但是我不知道在Java中是否可行。 问题答案: 尝试删除该元素,然后使用新名称再次放置它。假设地图中的键是,则可以通过以下方式实现:

  • 问题内容: 基本路线是这样的: 是否可以命名该路由并在任何模板中使用它,以便可以像这样使用它: 灵感来自Django :) 问题答案: 没有开箱即用的机制。但是,您可以模仿Django的样式:定义文件,该文件将包含URL数组。首先开始: myviews.js urls.js 现在在 app.js (或任何主文件)中,您需要将URL绑定到Express。例如这样: app.js 现在,您可以定义自定

  • 问题内容: 我经常在eclipse中使用重构->重命名功能,并且我也习惯于命名关联的单元测试TestedClassNameTest。但是,当我重命名测试过的类时,我一定不要忘记重命名我的unitTest。重命名已测试的类时,自动重命名我的单元测试非常有用。 我想创建一个可以完成任务的插件并不难,但也许甚至没有必要吗? 问题答案: 经过几次谷歌搜索和日食搜索后,似乎该功能尚不可用。 今天,Eclip

  • Nrwl说在这里问。看来我是第一个! 我搞错了。我用nx原理图创建了一个名为Angular的项目。如果可能,我想重命名名称空间,以便访问我的库,如: 而不是: 我尝试在angular-cli.json和package.json中更改项目名称,但我非常确定这不是答案。 此外,nx将不能作为标记使用,因为它已经在其他地方使用。我建议使用nrwl nx。 编辑:划掉那个。我没有足够的声誉来创建新标签。如

  • 问题内容: 我目前正在使用jar-with-dependencies程序集创建这样的jar。但是,我的罐子的名称有点长。 由于AS400上的RPG程序正在使用此jar,因此我想缩短它,以使这些开发人员的工作更加轻松。但是,除了手工之外,我还没有找到一种方法来从通常的罐子中重命名罐子。我想要类似的东西 无论如何,在没有基本复制jar-with-dependencies程序集描述符并将其完全调用的情况

  • 问题内容: 我有这样的查询(简体): 我从Java执行此查询,我想将其映射到我的课程上,但是我不希望将’_id’映射到’name’字段上。因为如果我做这样的事情: 然后,当我将数据保存回mongo(经过一些修改)后,我希望生成一个真实的ID时,数据将以名称’_id’保存。 那么,如何在$ group操作之后重命名“ _id”? 问题答案: 您可以通过 在管道的末尾添加一个阶段来实现此目的,如下所示