Unity 5.3で新しいJSONシリアライズ機能を使用しようとしましたが、Unity Webサイトで提供されている使用例を参照して次のコードを書きました。私が作った唯一の違いは、純粋なパブリック変数にする代わりに、setterとgetterを使ってオブジェクトクラス(私の場合はFruitItemクラス)の変数を作成することでした。これを行うことで、中身のない中括弧しか得られませんでした。しかし、getterとsetterを削除してクラス変数を純粋なpublic変数にすると、私は正しい結果を得ることができます。何が起こったのか誰にでも私に何かヒントを与えることができますか?あなたの助けを前にありがとう。正常に動作Unity 5.3のオブジェクトクラスでsetterとgetterを使用しているときに空のJSON文字列が返されたのはなぜですか?
コード:
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;
}
コード正しく動作しません:
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;}
}
感謝。私は、統一されたシリアライゼーションによってサポートされる型の制限があることを認識しませんでした。ただし、キーワード「[Serializable]」は「using System」によって参照されました。それはネットのようなものです。 Unityに設定されているシリアライゼーションの制限がそれに影響を与えるかどうかは疑問です。再度、感謝します。 –
あなたの答えをありがとう – tim
私はまだこれが正確であるか分からない。最新のドキュメントによると:https://docs.unity3d.com/ScriptReference/JsonUtility.FromJson.html "単純なクラスと構造だけがサポートされています; UnityEngine.Objectから派生したクラス(MonoBehaviourやScriptableObjectなど)はサポートされていません。 " シリアライズ可能なタイプのリストの最初の箇条書きが間違っているようです。 –