Próbowałem użyć nowej funkcji serializacji JSON w Unity 5.3, a ja napisałem poniższy kod, odwołując się do przykładu użycia podanego na stronie Unity. Jedyną inną częścią, którą stworzyłem, było stworzenie zmiennych klasy obiektu (klasa FruitItem w moim przypadku) za pomocą settera i gettera zamiast tworzenia czystych publicznych zmiennych. Robiąc to, mam tylko parę aparatów bez zawartości w środku. Jeśli jednak usuwam metodę pobierającą i ustawiającą, a zmienne klasy będą czystymi publicznymi zmiennymi, będę mógł uzyskać poprawny wynik. Czy ktokolwiek może mi podpowiedzieć, dlaczego tak się stało? Z góry dziękuje za twoją pomoc.Dlaczego otrzymałem pusty ciąg JSON zwrócony podczas używania settera i gettera w klasie obiektu w Unity 5.3?
kod, który działa prawidłowo:
using UnityEngine;
using UnityEditor;
using System.Collections;
using System;
public class testJson : MonoBehaviour {
// Use this for initialization
void Start() {
FruitItem myFruit = new FruitItem(){ name = "apple", price = 52, quantity = 53 };
string jsonString = JsonUtility.ToJson (myFruit);
Debug.Log (jsonString);
}
// Update is called once per frame
void Update() {
}
}
[Serializable]
public class FruitItem{
//using the pure public variables and the output will be:
//{"name":"apple","quantity":53,"price":52}
public string name;
public int quantity;
public int price;
}
Kod, który nie działa prawidłowo:
using UnityEngine;
using UnityEditor;
using System.Collections;
using System;
public class testJson : MonoBehaviour {
// Use this for initialization
void Start() {
FruitItem myFruit = new FruitItem(){ name = "apple", price = 52, quantity = 53 };
string jsonString = JsonUtility.ToJson (myFruit);
Debug.Log (jsonString);
}
// Update is called once per frame
void Update() {
}
}
[Serializable]
public class FruitItem{
//using the pure public variables and the output will be:
//{}
public string name{ get; set;}
public int quantity{ get; set;}
public int price{ get; set;}
}
Dzięki za odpowiedź i odniesienie podałeś, Mattias. Nie zdawałem sobie sprawy, że istnieją ograniczenia dotyczące typów obsługiwanych przez serializację jedności. Jednak do słowa kluczowego "[Serializable]" odwołano się "używając System". Wygląda na to, że coś jest .Net. Zastanawiam się, czy ograniczenia serializacji ustalone dla Unity będą miały tak duży wpływ. Dzięki jeszcze raz. –
Dzięki za odpowiedź – tim
Nie jestem pewien, czy to nadal jest dokładne. Zgodnie z najnowszą dokumentacją: https://docs.unity3d.com/ScriptReference/JsonUtility.FromJson.html "Obsługiwane są tylko proste klasy i struktury, klasy pochodzące z UnityEngine.Object (takie jak MonoBehaviour lub ScriptableObject) nie są. " Wygląda na to, że pierwszy punkt na liście typów Serializable jest teraz niepoprawny. –