如何为 System.Serializable 类设置自定义 json 字段名称?
Posted
技术标签:
【中文标题】如何为 System.Serializable 类设置自定义 json 字段名称?【英文标题】:How to set custom json field name for System.Serializable class? 【发布时间】:2018-04-17 09:51:20 【问题描述】:我正在从服务器获取响应:
"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?
【问题讨论】:
[JsonProperty("auth_token")]public string AuthToken get;set;
(如果你使用 Json.Net)
不,我正在使用 Mono (Unity3d)
【参考方案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);
【讨论】:
【参考方案2】:使用JsonDotNet
代替JsonUtility
这样做:
[System.Serializable]
public class TokenResponse
// what is `JsonProperty` see:https://www.newtonsoft.com/json/help/html/JsonPropertyName.htm
[JsonProperty("auth_token")]
public string authToken set; get;
public static TokenResponse CreateFromJSON(string json)
return JsonConvert.DeserializeObject<TokenResponse>(json);
【讨论】:
【参考方案3】:我想这是 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);
希望这会有所帮助。
【讨论】:
这不起作用,因为 Unity 从不序列化属性——所以你基本上是在告诉 Unity 的JsonUtility
“不要寻找名为 "AuthToken"
的键,因为我指定了 [NonSerialized]
;并且不要寻找名为 "auth_token"
的键,因为它是一个属性。” 请参阅下面我的答案以获取有效的版本(如果您想更新,我很乐意删除我的答案你的答案。;-D)
@SlippD.Thompson 是对的,请更新答案以上是关于如何为 System.Serializable 类设置自定义 json 字段名称?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 iOS 项目创建类引用,如 NSDictionary 类引用 - Apple Developer