[英]Cannot Serialize and Deserialize JSON in Unity
我已經嘗試使用JsonUtility
和Newtonsoft.Json
在 Unity 中序列化和反序列化 JSON 。 但它們都沒有按預期工作。
JsonUtility
的問題是在將 object 轉換為 JSON 時會給出空字符串。 將 JSON 字符串轉換為自定義 class object 並打印類的object.value
並打印空字符串時。 具有諷刺意味的是,它沒有給出任何錯誤。
Newtonsoft.Json
的問題在於它不適用於 Android 和 iOS 構建和使用 IL2CPP 的構建。
C#代碼
public class AddUsers : MonoBehaviour
{
public void ConvertToJSONSample()
{
UserDetails userDetails1 = new UserDetails()
{
Id = "0001",
Name = "John"
};
string JsonString = JsonUtility.ToJson(userDetails1);
print(JsonString); ;
UserDetails userDetails2 = JsonUtility.FromJson<UserDetails>(JsonString);
print("User's Name is: " + userDetails2.Name);
}
}
[Serializable]
public class UserDetails
{
public string Id { get; set; }
public string Name { get; set; }
}
Output
感謝@dbc 的澄清。 JsonUtility
可能會序列化字段而不是屬性。 在問題的情況下,添加{ get; set; }
{ get; set; }
{ get; set; }
使它成為一個屬性。 使用屬性可以在代碼中添加額外的功能。 但是,要使代碼與JsonUtility
一起使用,請移除get;
並set;
從代碼。 但是通過使用 Unity 的內置JsonUtility
,您將獲得非常有限的功能。 但它有局限性。 它不適用於高級用法。 對於下面提到的 JamesNK/Newtonsoft.Json 的使用分支,它與 Unity 的基於 Android 和 iOS 等構建的 IL2CPP 一起使用。
另一種方法是,使用來自Json-for-Unity的 JamesNK/Newtonsoft.Json 的 fork 。 GitHub頁面包含有關如何使用、如何安裝、其功能等的詳細說明。它適用於移動構建,例如 Android 和 iOS 和其他 IL2CPP 構建。 Package 是開源的,由開發人員支持,這與自 2016 年以來未更新的JSON.Net插件不同。
請注意,使用JSON.Net是一個選項,但它自 2016 年以來未更新,因此可能會在最新或即將發布的 Unity 版本中出現問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.