J'ai quelques données dont j'ai besoin pour sérialiser/désérialiser, mais JsonUtility ne fait tout simplement pas ce qu'il est censé faire. Voici les objets avec lesquels je travaille:
public class SpriteData {
public string Sprite_name;
public Vector2 Sprite_size;
public List<Vector2> subimage;
}
public class SpriteDataCollection
{
public SpriteData[] sprites;
}
Si je crée un SpriteDataCollection et tente de le sérialiser avec JsonUtility, j'obtiens simplement un objet vide {}. Voici comment il est construit:
SpriteData data = new SpriteData();
data.Sprite_name = "idle";
data.Sprite_size = new Vector2(64.0f, 64.0f);
data.subimage = new List<Vector2> { new Vector2(0.0f, 0.0f) };
SpriteDataCollection col = new SpriteDataCollection();
col.sprites = new SpriteData[] { data };
Debug.Log(JsonUtility.ToJson(col));
Le journal de débogage affiche uniquement "{}". Pourquoi ne sérialise-t-il rien? Je l'ai testé et la sérialisation d'un seul SpriteData fait exactement ce qu'il est censé faire, mais cela ne fonctionnera pas dans SpriteDataCollection.
Il y a 4 raisons connues pour lesquelles vous pouvez obtenir un Json vide dans Unity.
1 . Non compris [Serializable]
. Vous obtenez un json vide si vous ne l'incluez pas.
2 . Utilisation de la propriété (get/set) comme variable. JsonUtility ne prend pas en charge cela.
3 . Tentative de sérialisation d'une collection autre que List
.
4 . Votre json est multi-tableau que JsonUtility
ne supporte pas et a besoin d'un wrapper pour fonctionner.
Le problème ressemble à # 1 . Tu es absent [Serializable]
sur les classes. Vous devez ajouter using System;
pour l'utiliser.
[Serializable]
public class SpriteData {
public string Sprite_name;
public Vector2 Sprite_size;
public List<Vector2> subimage;
}
et
[Serializable]
public class SpriteDataCollection
{
public SpriteData[] sprites;
}
5 . Comme l'exemple donné ci-dessus dans la classe SpriteData
, la variable doit être une variable publique. S'il s'agit d'une variable privée, ajoutez [SerializeField]
en haut.
[Serializable]
public class SpriteDataCollection
{
[SerializeField]
private SpriteData[] sprites;
}
S'il ne fonctionne toujours pas, votre json n'est probablement pas valide. Lisez "4.TROUBLESHOOTING JsonUtility" dans la réponse du "Sérialiser et désérialiser Json et Json Array dans Unity" . Cela devrait vous expliquer comment résoudre ce problème.