我从服务器获取该响应:
{
"auth_token": "062450b9dd7e189f43427fbc5386f7771ba59467"
}
为了访问它,我需要使用与原始JSON相同的名称。
[System.Serializable]
public class TokenResponse
{
public string auth_token; // I want to rename it to authToken without renaming corresponding field in json
public static TokenResponse CreateFromJSON(string json) {
return JsonUtility.FromJson<TokenResponse>(json);
}
}
如何在不丢失功能的情况下将TokenResponse.auth_token重命名为TokenResponse.authToken?
答案 0 :(得分:1)
@Mike Mat's answer几乎是Unity的一个很好的解决方案,但不幸的是(因为Unity never serializes C# properties) 不太有效。
这是他的答案的一种变体,可以在Unity 中进行编译并正常工作(已在Unity 2018.3.1中进行测试)。
[System.Serializable]
public class TokenResponse
{
[SerializeField] private string auth_token;
public string authToken { get { return auth_token; } }
public static TokenResponse CreateFromJSON(string json) {
return JsonUtility.FromJson<TokenResponse>(json);
}
}
答案 1 :(得分:0)
我想这是Unity的代码。不幸的是,它似乎不允许您将JSON字符串的密钥名称改为开箱即用。
但是the documentation 表示可以使用[NonSerialized]属性省略字段。因此,以下代码可能会让您按照自己的意愿行事。
[System.Serializable]
public class TokenResponse
{
[NonSerialized]
public string AuthToken;
public string auth_token { get { return AuthToken; } }
public static TokenResponse CreateFromJSON(string json)
{
return JsonUtility.FromJson<TokenResponse>(json);
}
}
希望这有帮助。
答案 2 :(得分:0)
使用JsonDotNet
代替JsonUtility
只需执行以下操作:
[System.Serializable]
public class TokenResponse
{
// what is `JsonProperty` see:https://www.newtonsoft.com/json/help/html/JsonPropertyName.htm
[JsonProperty("authToken")]
public string auth_token {set; get;}
public static TokenResponse CreateFromJSON(string json) {
return JsonConvert.DeserializeObject<TokenResponse>(json);
}
}