簡體   English   中英

無法在 Unity 中序列化和反序列化 JSON

[英]Cannot Serialize and Deserialize JSON in Unity

我已經嘗試使用JsonUtilityNewtonsoft.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM