为了账号安全,请及时绑定邮箱和手机立即绑定

填充数组(列表)以将调用从 C# 发送到 php

填充数组(列表)以将调用从 C# 发送到 php

C#
牛魔王的故事 2023-07-09 16:31:55
因此,我将参数从 unity 传递到 PHP API,一切都很好,但现在我想将其作为数组传递,因此在这个方法中,我声明了我的列表并尝试使用正确的参数发送请求tokenID、address和value(最后 3 个)需要从声明的列表中填充,但我不知道如何做到这一点。任何帮助表示赞赏public List<string> recipientAdvancedAddress = new List<string>();public List<string> tokenAdvancedSend = new List<string>();public List<string> valueAdvancedSend = new List<string>();public void Send(){    StartCoroutine(SendAsync(userSession, senderAdvancedID, tokenAdvancedSend, recipientAdvancedAddress, valueAdvancedSend));}IEnumerator SendAsync(string session, int senderID, List<string> tokenID, List<string> addresses, List<string> value){    CryptoFilter cryptoFilter = new CryptoFilter();    cryptoFilter.AddParam("action", "advancedSendFT");    cryptoFilter.AddParam("session", session);    cryptoFilter.AddParam("senderID", $"{senderID}");    cryptoFilter.AddParam("tokenID", tokenID);    cryptoFilter.AddParam("addresses", addresses);    cryptoFilter.AddParam("value", value);    using (UnityWebRequest webRequest = UnityWebRequest.Post($"http://{SERVER_ADDR}/tsd/api.php", cryptoFilter.GetRequestPayload()))        {            yield return webRequest.SendWebRequest();            var result = webRequest.downloadHandler.text;            // Decrypt the response from the server.            result = cryptoFilter.GetResponsePayload(result);            sendItem data = JsonConvert.DeserializeObject<sendItem>(result);            if (!data.error)                txID = data.id;        }}这是错误: https: //i.ibb.co/frNR5tF/error.png这是 CryptoFilter.cs 中的方法class CryptoFilter{    // Encrypt & Decrypt Engine    AES256 aes = new AES256();    // Request parameters    Dictionary<string, string> request = new Dictionary<string, string>();    /*     *     * Add a parameter.     *      */    public void AddParam(string name, string value)    {        if (value != "")            request.Add(name, value);    }顺便说一句,我不能在主脚本中执行 foreach 吗?所以如果我有 1 个 tokenID 就可以了,但是当我需要将 2 个 tokenID 发送到 2 个不同的地址时,这就是我想要实现的目标
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

AddParam 方法的重载怎么样:

AddParam(List<string>)

或者通用版本:

AddParam(List<T>)

甚至:

AddParam(Collection<T>)

我想我不太明白你在问什么,但在这个方法中,你也许可以循环遍历这些项目并用它们做你已经在做的事情。

编辑:看起来你最终需要一个 json 。为此,您可以使用 Unity 的内置序列化。首先创建一个表示 DTO(数据传输对象)的类,然后将其序列化为 json 字符串。

[Serializable]

public class CryptoFilter

{

    public string action;

    // other string fields


    public List<string> addresses;

    // other string list fields


    public CryptoFilter(string action, List<string> addresses)

    {

        this.action = action;

        this.addresses = addresses;

    }

}

然后使用:


CryptoFilter cryptoFilter = new CryptoFilter(...);

string json = JsonUtility.ToJson(cryptoFilter);

编辑:作为请求的字符串到字符串字典不适用于列表。使用可序列化的类,就像我为此发布的那样。只需将其称为 Request 等,而不是 CryptoFilter。然后创建该对象并将其设置为 CryptoFilter 一次,而不是多次调用 AddParam。


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信