AWS Cognito Auth JSON 请求未使用 Unity 中的嵌套类进行反序列化

问题描述 投票:0回答:1

我的 JSON 请求未使用 Unity 中的嵌套类进行反序列化。

我尝试了很多方法来解决这个问题。有人能发现问题吗?

这是来自 AWS Cognito 的 JSON 登录请求:

{
    "timestamp": "2024-05-17T02:14:10.331Z",
    "level": "INFO",
    "requestId": "2dc7b590-1827-4554-9821-908eb1d3ee3f",
    "message": {
        "$metadata": {
            "httpStatusCode": 200,
            "requestId": "0c684225-7a1b-469f-89e3-15d29da36f49",
            "attempts": 1,
            "totalRetryDelay": 0
        },
        "ChallengeName": "NEW_PASSWORD_REQUIRED",
        "ChallengeParameters": {
            "USER_ID_FOR_SRP": "348844c8-e001-7030-93c4-3c5a5a754fa2",
            "requiredAttributes": "[]",
            "userAttributes": "{\"email_verified\":\"true\",\"preferred_username\":\"RobloxHero\",\"email\":\"[email protected]\"}"
        },
        "Session": "AYABeHuZceyPXQVTVA1OPXwrdZIAHQABAAdTZXJ2aWNlABBDb2duaXRvVXNlclBvb2xzAAEAB2F3cy1rbXMAS2Fybjphd3M6a21zOnVzLWVhc3QtMTo3NDU2MjM0Njc1NTU6a2V5L2IxNTVhZmNhLWJmMjktNGVlZC1hZmQ4LWE5ZTA5MzY1M2RiZQC4AQIBAHjHL4WD3WpekpFe85nxP9Nwg99u3bPN6BTSaB-uHZcTLAF1FxlVsAaSp8ntnWxXieO7AAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMjuV5Bhw0j4lWg6JxAgEQgDusJsldE8RrnX72vgmOQkw9KkrzbARBsxGkfjRqS5A6T7T71F6umtOTz7XnjEqdeAfhfyQ2vT_Hmx2-nAIAAAAADAAAEAAAAAAAAAAAAAAAAABejP7rYrS09IQqwZHglO_k_____wAAAAEAAAAAAAAAAAAAAAEAAADVlPZSlzCXntBx_E8TEbzxbn4ZTZBEr5nMSXRinXYnmVRrlKjtLX7yv8giRh1z1_rYNSKGAY2b3cz1PyWadtwifpldG6_d3NdgthTaMpQNeIhJ_jmjfz0U_4hrYWVyz5OspPbR38Rlelj5r9DIQaGWGFMVVDuzeeouxbBTl83O3w5Rx2gYYZ3AmyIBrMiVxDscytZj8oJ4fit76lVlFlFNmwMywy6MjhDb80RGcYoUpkbUZn86X1Ycy5KZstb7tm4dFp7IN1ej69IcLmYZbvcJ4xBCZeEJCrfccFbdhVG0zGcPUB1lzw"
    }
}

这是我正在发出 JSON 登录请求的 Unity 插件代码:

public void LoginRequest()
    {
        AWSUserLoginRequest request = new AWSUserLoginRequest();
        request.username = username;
        request.password = password;

        using (UnityWebRequest www = UnityWebRequest.Post("https://game-api.compassoftruth.org/prod/Login", JsonUtility.ToJson(request), "application/json") )
        {
            www.SendWebRequest();
            while (www.isDone == false) {
            //do something, or nothing while blocking
            }
            if (www.result != UnityWebRequest.Result.Success) {
                Debug.Log(www.error);
            }
            else {
                LoginResult = JsonUtility.FromJson<AWSLoginResult>(www.downloadHandler.text.Replace('$'.ToString(), ""));
                // Show results as text
                Debug.Log(www.downloadHandler.text.Replace('$'.ToString(), ""));
                Debug.Log(LoginResult.level);
            }
        }
        
    }

我能够以字符串格式调试响应数据:

{"metadata":{"httpStatusCode":200,"requestId":"731de9a0-a3b3-4a75-a565-f19c49f19a50","attempts":1,"totalRetryDelay":0},"ChallengeName":"NEW_PASSWORD_REQUIRED","ChallengeParameters":{"USER_ID_FOR_SRP":"348844c8-e001-7030-93c4-3c5a5a754fa2","requiredAttributes":"[]","userAttributes":"{\"email_verified\":\"true\",\"preferred_username\":\"RobloxHero\",\"email\":\"[email protected]\"}"},"Session":"AYABeJlFAr90U2rURQa1RoyPy-AAHQABAAdTZXJ2aWNlABBDb2duaXRvVXNlclBvb2xzAAEAB2F3cy1rbXMAS2Fybjphd3M6a21zOnVzLWVhc3QtMTo3NDU2MjM0Njc1NTU6a2V5L2IxNTVhZmNhLWJmMjktNGVlZC1hZmQ4LWE5ZTA5MzY1M2RiZQC4AQIBAHjHL4WD3WpekpFe85nxP9Nwg99u3bPN6BTSaB-uHZcTLAH4F1Ox2jph9NZcOwFtL6m-AAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM7FLUPDofg4S5f67nAgEQgDsIOeZuVErT75jsNRBJz63Pat7GgObkPeKx7Li_z5tvnDG4FvrbLoLjVcgJpVin-rz9Cp_bcfmxyjX0owIAAAAADAAAEAAAAAAAAAAAAAAAAAAtqnLZ5SIekFGUo3n6YKYi_____wAAAAEAAAAAAAAAAAAAAAEAAADV0iUMK4jkW4ioIy8AGcb5bLTQ3jW90JXuaucWAlImLuT55a3TaWyStOL_O6uJb-2NDqz7ejkQ3eUDlMn02AYwvj75cI4bB6nuaOSomjBZ4-tkT8AtpbykIYTgc451wjg5U9CrnbbTViMR-s3Fdx6P_rABop_INWkf1lAUs1xrlY5AMX3VGc2bjlHX9Ejips9irlVpnuUXic-AJXQUcZeHbi9DmcfSFe0VDTQGWMJmLFUZFWfJAQeo-dvQadfvkm2r1Lwwn42WGVkPykxbVqdkTUxIUcpFajlRAZp5B4PRxoJCBp-CVA"}

这是我用来尝试使用 JSONUtility 解析信息的嵌套类:

using System;
using UnityEngine;
using UnityEngine.Tilemaps;
using UnityEngine.Networking;
using System.Collections;
using System.Collections.Generic;
using UnityEditor.VersionControl;

[Serializable]
public class AWSLoginResult
{
    public string timestamp;
    public string level;
    public string requestId;
    public message message; 

}

[Serializable]
public class message
{
    public string ChallangeName;
    public ChallangeParameters ChallangeParameters;
    public string Session;
}

[Serializable]
public class ChallangeParameters
{
    public string USER_ID_FOR_SRP;
    public string userAttributes;
    public string requiredAttributes;

}

c# json amazon-web-services unity-game-engine amazon-cognito
1个回答
0
投票

我的 C# 类使用 AWS Logs 中的整个日志对象... 我只需要使用 node.js 中的控制台记录对象,即“消息”。 更改我的类以镜像正确的对象如下所示。

using System;
using UnityEngine;
using UnityEngine.Tilemaps;
using UnityEngine.Networking;
using System.Collections;
using System.Collections.Generic;
using UnityEditor.VersionControl;
using Unity.VisualScripting;

[Serializable]
public class AWSLoginResult
{
    public metadata metadata;
    public string ChallangeName;
    public ChallangeParameters ChallangeParameters;
    public string Session;

}

[Serializable]
public class metadata
{
    public string httpStatusCode;
    public string requestId;
    public string attempts;
    public string totalRetryDelay;

}

[Serializable]
public class ChallangeParameters
{
    public string USER_ID_FOR_SRP;
    public string userAttributes;
    public string requiredAttributes;

}
© www.soinside.com 2019 - 2024. All rights reserved.