Kesalahan serialisasi Script
Joomla

JSON Serialisasi

Gunakan kelas JsonUtility untuk mengkonversi objek Unity ke dan dari format JSON. Misalnya, Anda dapat menggunakan JSON Serialisasi untuk berinteraksi dengan layanan web, atau dengan mudah mengemas dan membongkar data ke format berbasis teks.

Login Serialisasi menggunakan gagasan "distruktur" JSON: Anda membuat kelas atau struktur untuk menggambarkan variabel apa yang ingin Anda simpan dalam data JSON Anda. Contoh:

[Serializable]
public class MyClass
{
    public int level;
    public float timeElapsed;
    public string playerName;
}

Ini mendefinisikan polos Kelas C# mengandung tiga variabel (level, timeElapsed, dan playerName) dan menandainya dengan atribut Serializable, untuk bekerja dengan serializer JSON. Untuk membuat instance kelas Anda, Anda dapat menggunakan sesuatu seperti ini:

MyClass myObject = new MyClass();
myObject.level = 1;
myObject.timeElapsed = 47.5f;
myObject.playerName = "Dr Charles Francis";

Kemudian gunakan metode JsonUtility.ToJson untuk serialisasinya (mengkonversinya) ke format JSON:

string json = JsonUtility.ToJson(myObject);
// json now contains: '{"level":1,"timeElapsed":47.5,"playerName":"Dr Charles Francis"}'

Untuk mengubah JSON kembali ke objek, gunakan JsonUtility.DariJson:

myObject = JsonUtility.FromJson<MyClass>(json);

Ini menciptakan contoh baru MyClass dan menetapkan nilai-nilai di atasnya menggunakan data JSON. Jika data JSON mengandung nilai-nilai yang tidak peta ke bidang di MyClass, maka serializer mengabaikan nilai-nilai tersebut. Jika data JSON hilang nilai untuk bidang di MyClass, maka serializer meninggalkan nilai-nilai yang dibangun untuk bidang-bidang tersebut dalam objek yang dikembalikan.

Overwriting objek dengan JSON

Anda juga dapat merusak data JSON melalui objek yang ada, yang menimpa data yang ada:

JsonUtility.FromJsonOverwrite(json, myObject);

Jika data JSON tidak mengandung nilai untuk lapangan, serializer tidak mengubah nilai lapangan. Metode ini memungkinkan Anda untuk menjaga alokasi minimal dengan menggunakan kembali objek yang Anda buat sebelumnya. Hal ini juga memungkinkan Anda untuk "patch" objek dengan sengaja menuliskannya dengan JSON yang hanya mengandung sedikit subset bidang.

Sitemap JSON Serializer API mendukung subclass Warning: dan MonoBehaviour serta struktur dan kelas polos. Namun, ketika deserializing JSON ke subclasses Login Sitemap atau MonoBehaviour, Anda harus menggunakan metode ScriptableObject. Jika Anda mencoba menggunakan FromJsonOverwrite, Unity membuang pengecualian karena perilaku ini tidak didukung.FromJson, Unity throws an exception because this behavior is not supported.

Jenis yang didukung

JSON Serializer API mendukung subclass MonoBehaviour, subklas ScriptableObject, atau kelas polos atau merusak atribut [Serializable]. Ketika Anda melewati objek pada serializer Unity standar untuk pemrosesan, aturan dan batasan yang sama berlaku karena mereka melakukan Inspektur: Unity serializes bidang hanya; dan jenis seperti Dictionary<> tidak didukung.

Unity tidak mendukung melewati jenis lain langsung ke API, seperti jenis atau array primitif. Jika Anda perlu mengonversi mereka, membungkusnya dalam class atau struct dari beberapa jenis.

Dalam editor hanya, ada API paralel, EditorJsonUtility, yang memungkinkan Anda untuk menampilkan objek yang berasal dari Login Sitemap baik ke dan dari JSON. Ini menghasilkan JSON yang berisi data yang sama dengan representasi YAML objek.

JsonUtility dan EditorJsonUtility adalah kelas utilitas untuk serializing Objek dan dari format string JSON menggunakan Aturan serialisasi Unity. Dalam kasus di mana perlu untuk memanipulasi data JSON melalui kode, atau untuk serialisasi struktur data yang serialisasi Unity tidak mendukung, Anda dapat menggunakan tujuan umum. NET JSON library sebagai pendamping ke JsonUtility API.

Performance

Tes Benchmark menunjukkan bahwa JsonUtility secara signifikan lebih cepat daripada populer. Solusi JSON NET, meskipun kelas ini memberikan fitur yang lebih sedikit dalam beberapa kasus.

Penggunaan memori untuk pengumpulan sampah (GC) minimal:

  • ToJson mengalokasikan memori GC hanya untuk string yang dikembalikan.
  • FromJson mengalokasikan memori GC hanya untuk objek yang dikembalikan, serta setiap subobjects yang diperlukan (misalnya, jika Anda mendedikasikan objek yang mengandung array, maka mengalokasikan memori GC Unity untuk array).
  • FromJsonOverwrite mengalokasikan memori GC hanya diperlukan untuk bidang tertulis (misalnya, string dan array). Ini berarti bahwa Unity tidak mengalokasikan memori GC apa pun di semua jika semua bidang yang ditimpakan oleh JSON diberi nama.

Anda dapat menggunakan JsonUtility API dari benang latar belakang. Namun, seperti dengan kode multithreaded, berhati-hati untuk tidak mengakses atau mengubah objek pada satu benang sementara benang lain serializing atau deserializing itu.

Mengontrol output ToJson()

Metode ToJson mendukung output JSON yang cukup. Dimatikan secara default tetapi Anda dapat mengubahnya dengan melewati true sebagai parameter kedua.

Anda dapat omit field dari output dengan menggunakan atribut [NonSerialized].

Menggunakan DariJson() dengan tipe yang tidak diketahui

Jika Anda tidak tahu jenis objek di depan waktu, mendedikasikan JSON ke dalam kelas atau merusak yang mengandung bidang “kommon”, dan kemudian gunakan nilai-nilai bidang tersebut untuk mengerjakan jenis yang sebenarnya yang Anda inginkan. Kemudian deserialize waktu kedua ke dalam jenis itu.

Kesalahan serialisasi Script
Joomla