JsonUtility.ToJson正在为所有字段指定null



好的,所以我正在制作一个与AWS Cognito接口的api,我已经到了可以验证用户并将IdToken(etc(作为JSON返回的地步,它看起来像这样:

{
"AuthenticationResult": {
"AccessToken": "eyJraWQiOiJ1aWtyV0FNajZYbllcL0tVeG10RndJb1N4U0RhMFRST3NpdWg3Z1JTcnFhWT0iLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiI5OTNhNmYyMS1hOGRjLTRkZjEtYWMzNi0wYTUzOTBmYjAxYTciLCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAudXMtZWFzdC0yLmFtYXpvbmF3cy5jb21cL3VzLWVhc3QtMl9OazloUWZJbzIiLCJjbGllbnRfaWQiOiI0aThqczJ2dWVucHZvMGI0dHEwYWVoaXI5ZyIsIm9yaWdpbl9qdGkiOiJhNjczMjBmNi1iYjU2LTQ2ZTYtODU0Yy00YWY2MTYzNzNiOWUiLCJldmVudF9pZCI6Ijc2NGE0MGQ1LTFlNjAtNGE1OS1iNGUyLWRhNjM5N2Q1NTZhMCIsInRva2VuX3VzZSI6ImFjY2VzcyIsInNjb3BlIjoiYXdzLmNvZ25pdG8uc2lnbmluLnVzZXIuYWRtaW4iLCJhdXRoX3RpbWUiOjE2NjAzNTU4NzEsImV4cCI6MTY2MDM1OTQ3MSwiaWF0IjoxNjYwMzU1ODcxLCJqdGkiOiJiNGI5MzEyMy00ZWNlLTRlZDYtOWQ4Mi1lNDEwZTZmY2ZmYjIiLCJ1c2VybmFtZSI6InNoYXduZXBkbWFydGluQGdtYWlsLmNvbSJ9.y6oG5t3Q_DB9Clv3BBhO8PtBoyiS5WolkYZyKyLGEFkkPIIenIpio-xIY7i9efcvpw89PKLy_iZT6VyGxZ1HZpK6AMiJnhMmOG191GOuyrv5lN_dm8LEkRBLyeKzQEK_5tHgfwEsu1AYLQlIaX58FAajG2XwAUXtBOCqm45ej2HpNjXgG2JOFnz0Ayb9DGkXqsYYk-qD9erAubt-xu9hyOV4WmcJ7RmQ9RlRuxvXxdorJurzriYNnM6_zaSqI54lrS4pX-TVcy082JRfenOeGuCS_Wn5L49_XBdIfDgfEqxaifI6eubXpvuKttEZxje_LQuPwfYTVNw6_MkZN7IoYQ",
"ExpiresIn": 3600,
"IdToken": "eyJraWQiOiJzNUpzNEtIZ2h3M1lNamVEeFNreXRPNDlIUHJDTExCbUN5blhqak56UEdBPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiI5OTNhNmYyMS1hOGRjLTRkZjEtYWMzNi0wYTUzOTBmYjAxYTciLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tXC91cy1lYXN0LTJfTms5aFFmSW8yIiwiY29nbml0bzp1c2VybmFtZSI6InNoYXduZXBkbWFydGluQGdtYWlsLmNvbSIsIm9yaWdpbl9qdGkiOiJhNjczMjBmNi1iYjU2LTQ2ZTYtODU0Yy00YWY2MTYzNzNiOWUiLCJhdWQiOiI0aThqczJ2dWVucHZvMGI0dHEwYWVoaXI5ZyIsImV2ZW50X2lkIjoiNzY0YTQwZDUtMWU2MC00YTU5LWI0ZTItZGE2Mzk3ZDU1NmEwIiwidG9rZW5fdXNlIjoiaWQiLCJhdXRoX3RpbWUiOjE2NjAzNTU4NzEsImV4cCI6MTY2MDM1OTQ3MSwiaWF0IjoxNjYwMzU1ODcxLCJqdGkiOiIxZTk0N2QxYi1jZDJhLTQ0N2EtYTYzNS03YjQzMDk5MjkwODEiLCJlbWFpbCI6InNoYXduZXBkbWFydGluQGdtYWlsLmNvbSJ9.dn9v_J6VYi1ont7H2rj9tuIvzHXO4GL_sMaHy6SS48BF-JP-lVYs_tI_d5fUwE9pYJpiskMpVJlfGivliqsIdJkZAZrWUPiQYLSEwPQOblrVXmiXt-mwYe8w1D_jhYT9tg1aIW3pF8A7PWOF6s3-LyBhcs1I6VML8faVxB3ai2HMm3CQPq-c2GC3ad_IlhCkb9FDXESmu4B9gXjXt6xG4V-fNBSrs325gxAt95VmXGJnh0DZQPs52olwDbFPSMm5vxLwEtlmrgqG431kRK8r8E8KN_NSmmGBDBxcz3oEoy1Io8Mba8y6YmUP1LNIGLzhuFqDgnCX_NO0HVC2PPsUYw",
"RefreshToken": "eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAifQ.UqTRq3nsMyfBVYTvFhHFtHmcW6NrMzCEB8-_Aytg_mBitYs_mSEam41iXC7htD36VlkvuTPYk7MR92Bx5jhvmOvlKsG0T9o_WRqf1EXBO8ubRaUd9IefZXh8f4cNLlnv3SHvxnN_s5D4-MppvP3ESRXS9n6TiDHVLqLFuun5JQ_K6jfDJ2Sn0mnq8rlfG6xBX0wal1Y74pzCoSbsayOm2I9CA-IiED5fbxyObnkyJOGtgX7gBa2OoIk2w4Qxr6cc6evCaDl4jKk_DFmvaoPfHhNRQWOGvu23gruyywwrWCXu-UwThKaE5cz2nfo29JqPNU85FbWvZPYVLUic_ddEIA.AfYaiVzXYCis3kBd.xHhhT0qPV9wKlDivoMTNSbZIwqLy3djtcCKXDcbYTrAQG2Qti3xGzxBlFEkYH2FrP_u7GI-mpDerae-54hjB9mU6YUZ268xqJZr1G41vjEOpbG8J0Ipa9KiB_bmq63XtCC6V6zPR_W880rlyZ9QkwwexBWBag0tH8WfLsWH7nfaNdiZuQWtEYf4KDZNar_XMXnE3sg_-by-wWtI27GYXqkkN9m1LvmEHhNUUMoe93K0IGMcWHwlQW62iLNJHgejSnx8JcvyiHilTFrKH1pfEfD_GbEtfqlH0q1_8QV8xq0gE_xUYPWHHbA5zXoxeEMltKhJ62FBJOD15LG1mP27hvupGJnz8dkWIm4QBPbIw85YG6_GT3jECkLkD6Pjm9Ph7Xbx69JGINWHzmFf1BnIzuZP6GcDbuaQPi1dfR4ucHIC5zYmol2lQ-C4kfAXrkjlHWeq4NOzAR0s1S8NNy990TVbDbb1BtjtFHtgFjk-FxGJ8c-pdLQTsubPUhnjv2JnAr5Fq8uXXiBTYm1ZnI904Uf_7rI2LM1NDe9_s5e6Fx3APy2ZyYgVHFQrGkk8Z37TRDiGn3_V1OxH78f9xZ6kjYbMqB0oo3oerhUKZjWMqJJP2MknemAndx865kU0tubfd74GVJIckEj5mZ_ChZ1nz8pR4c-fHPqo2DjOAsbR67Ty9ujZb4UOuKq1BIWWwPcMUEE1ZtOfCOxL2i-1gAwWCbPzE4ZvQ5Ky_B48zYsJTQb2yBc1c1LpkLlP3Sp8dGZOT_bCEtl-KQP_TYsTB5XkGXVTlcbqWx1abWIViLaKRg3DDecDDPGIxwHbxl9CDR1hEFPT_-mwENTVyUdfabW3P0msmxGDnEV2CRm_Rp6qC5IZCgI1rs-bnB_fG_dThwAUKPxtNbCERYWZzttYS0Lm8_zfmMeEuzki037X811kGaz0g8kj3_qnT1au8660sENL3BN4yqVbeZp6hJp1UwTIFITIzuqnhxlcMMFZ8BhtduS-NIduyzc7jmjtN-XygIKowX0l8MKLbN-n3YxsuqeFZ-kFsDJzCdNsb_gwPbCE7xUH6KiVNpHB4ZmN__-5rGLt0pwBjqsjZX-rG_ajiPX0avs3NsSLxgdBRgqqJc6iNiIoPQll-Gow17YFjHIEuj_6rWiC4WCrmtpJa7JjusC9G1rXxvmjmhpwA0pckitMp_zpiKUJIENjvTyGZ-BcBH-BBYTo7GD2B575foo1hjCgMww9e-P7sZ9N73vrcEC8wh_XEwp1zmSNlJcfd-ZEpCxTmKLDHWBzjffawbDrZoW9jusJpjs1iFmTRgIYR1l1D.7r6I2Jgnedf2Zgkfx9BHGA",
"TokenType": "Bearer"
},
"ChallengeParameters": {}
}

我将其转换为C#中的相关类:

public class AuthenticationResult
{
public string AccessToken;
public int ExpiresIn;
public string IdToken;
public string RefreshToken;
public string TokenType;
}
public class ChallengeParameters
{
}
public class Auth
{
public AuthenticationResult AuthenticationResult;
public ChallengeParameters ChallengeParameters;
}

我认为这应该完全匹配(我已经发现Unity不想要任何{get/set}类型的代码。

var r = JsonUtility.FromJson<Auth>(www.downloadHandler.text);
Debug.Log(r);
Debug.Log(r.AuthenticationResult);
Debug.Log(r.AuthenticationResult.TokenType);

退货:

[Log] [DBTest/Editor/DBTest.cs:257] [DBTest/<Login>d__11] [MoveNext] [20:50:03] MyNamespace.DBTest+Auth
[Log] [DBTest/Editor/DBTest.cs:258] [DBTest/<Login>d__11] [MoveNext] [20:50:03] Null
[Exception] [DBTest/Editor/DBTest.cs:259] [DBTest+<Login>d__11] [MoveNext] [20:50:03] NullReferenceException: Object reference not set to an instance of an object

有什么想法吗?谢谢

使用JsonUtility时,类必须具有属性[System.Serializable],如下所示:

[System.Serializable]
public class AuthenticationResult
{
public string AccessToken;
public int ExpiresIn;
public string IdToken;
public string RefreshToken;
public string TokenType;
}
[System.Serializable]
public class ChallengeParameters
{
}
[System.Serializable]
public class Auth
{
public AuthenticationResult AuthenticationResult;
public ChallengeParameters ChallengeParameters;
}

最新更新