C# 是否可以将return(item1、item2、item3、item4、item5)重命名为其他名称?
我想将名称item1、item2、item3、item4、item5更改为FunctionSuccessful、Errorline1、Errorline2、Errorline3、Errorline4。我该怎么做 我的代码没有按预期工作,因为它仍然在客户端代码中返回item1、item2、item3、item4、item5,而不是新的名称函数Successful、Errorline1、Errorline2、Errorline3、Errorline4: 我应该在Azure函数中更改什么,以便它在客户端代码中返回新名称FunctionSuccessful、Errorline1、Errorline2、Errorline3、Errorline4 Azure功能:C# 是否可以将return(item1、item2、item3、item4、item5)重命名为其他名称?,c#,C#,我想将名称item1、item2、item3、item4、item5更改为FunctionSuccessful、Errorline1、Errorline2、Errorline3、Errorline4。我该怎么做 我的代码没有按预期工作,因为它仍然在客户端代码中返回item1、item2、item3、item4、item5,而不是新的名称函数Successful、Errorline1、Errorline2、Errorline3、Errorline4: 我应该在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);
}
[函数名(“AddUsernamePasswordEmailToAccount”)]
公共静态异步任务NewCall(
[HttpTrigger(AuthorizationLevel.Anonymous,“post”,Route=null)]HttpRequestMessage请求,ILogger日志)
{
// ...
bool functionsuccessful=false;
string errorline1=string.Empty;
string errorline2=string.Empty;
string errorline3=string.Empty;
string errorline4=string.Empty;
var result=await clientAPI.AddUsernamePasswordAsync(请求);
if(result.Error!=null)
{
var errors=OnPlayFabError(result.Error,语言);
errorline1=错误[0];
errorline2=错误[1];
errorline3=错误[2];
errorline4=错误[3];
}
其他的
{
functionsuccessful=true;
}
返回(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;
}
Dictionary dic=PlayFabSimpleJson.DeserializeObject(result.result.FunctionResult.ToString());
if(dic.TryGetValue(“功能成功”,输出对象a))
{
addedcredentials=(bool)a;
}
if(dic.TryGetValue(“Errorline1”,输出对象b))
{
errorline1=(字符串)b;
}
if(dic.TryGetValue(“Errorline2”,输出对象c))
{
errorline2=(字符串)c;
}
if(dic.TryGetValue(“Errorline3”,输出对象d))
{
errorline3=(字符串)d;
}
if(dic.TryGetValue(“Errorline4”,输出对象e))
{
errorline4=(字符串)e;
}
对您的问题的简短回答
使用所需的属性创建自己的类型,并返回该类型
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; }
}
以及:
为什么会这样?
我在这里玩了一会儿,因为我可以重现你的问题,我发现了一些有趣的事情
首先,它这样做的原因是Azure函数运行时依赖于Newtonsoft.Json
,而正是该包序列化了响应。此外,如果您阅读了,您将看到:
元组字段的默认名称是Item1
、Item2
、Item3
等等您始终可以使用字段的默认名称,即使显式指定或推断字段名称
依赖这些默认名称可能会使库支持元组变得更简单。如果您阅读了Newtonsoft.Json
repo,您将看到一个讨论,人们对实现命名元组字段的成本表示怀疑,因为他们认为这不值得付出努力
因此,为了清楚起见,我可以在一个简单的控制台应用程序中重现您的问题:
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"
}
但我发现有趣的是,使用System.Text.Json
进行序列化:
serialised = System.Text.Json.JsonSerializer.Serialize(result);
Console.WriteLine(serialised);
产生:
{}
我无法解释。我不太愿意称之为bug,但我绝对没想到会是这样
编辑:查看Seabizkit
的评论后,System.Text.Json
尚不支持ValueTuple
,这一点已得到确认,并应添加。对您的问题的简短回答
使用所需的属性创建自己的类型,并返回该类型
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; }
}
以及:
为什么会这样?
我在这里玩了一会儿,因为我可以重现你的问题,我发现了一些有趣的事情
首先,它这样做的原因是Azure函数运行时依赖于Newtonsoft.Json
,而正是该包序列化了响应。此外,如果您阅读了,您将看到:
元组字段的默认名称是Item1
、Item2
、Item3
等等您始终可以使用字段的默认名称,即使显式指定或推断字段名称
依赖这些默认名称可能会使库支持元组变得更简单。如果您阅读了Newtonsoft.Json
repo,您将看到一个讨论,人们对实现命名元组字段的成本表示怀疑,因为他们认为这不值得付出努力
因此,为了清楚起见,我可以在一个简单的控制台应用程序中重现您的问题:
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"
}
但我发现有趣的是,使用System.Text.Json
进行序列化:
serialised = System.Text.Json.JsonSerializer.Serialize(result);
Console.WriteLine(serialised);
产生:
{}
我无法解释。我不太愿意称之为bug,但我绝对没想到会是这样
编辑:在查看了Seabizkit
的评论之后,System.Text.Json
还不支持ValueTuple
,这一点已得到确认,并且应该添加。我希望您一切顺利。
您可以使用一种简单的策略,对字符串进行编码,其中第一个字符就是代码
编码:用代码表示的字符串
0:成功
1:错误行1。客户端异常1
2:错误行2。客户端异常2
3:错误行3。客户端异常3
4:错误行4。客户