実現したいこと
Json文字列にシリアライズした文字列をデシリアライズした際にBool型の値がおかしくなります。
具体的には、"value"を「False」で設定しておりますが、デシリアライズした際に「true」になってしまいます。
発生している問題・分からないこと
JsonObjectを正しくBool型に変更する方法が知りたいです。
該当のソースコード
コード数が大きくなるため、必要個所に絞っていることご容赦ください。
なお、ソースの全容は下記にあります。
Fungus
Json文字列
1{"scope":0,"key":"Var1","typeName":"System.Boolean","value":false}
C#
12[HideInInspector]3[SerializeField] private List<Variable> variables = new List<Variable>();4 5//試しに一番目の要素をシリアライズ6string jsonstr = JsonUtility.ToJson(variables[0]); //出力結果「{"scope":0,"key":"Var1","typeName":"","value":false}」7 8//JSONObjectに変換9JSONObject json = new JSONObject(jsonstr);10var scope = json.GetField("scope") as object;11string key = json.GetField("key").str;12string typeName = json.GetField("typeName").str;13 if (typeName.Equals("System.Boolean"))14{15 bool value = (bool)json.GetField("value");16 Debug.Log(value); //出力結果「True」。17 if(value == false) SetBooleanVariable(key, false);18 if (value == true) SetBooleanVariable(key, true);19}
C#
1 public abstract class Variable : MonoBehaviour 2 {3 [SerializeField] protected VariableScope scope;4 [SerializeField] protected string key = "";5 [SerializeField] protected string typeName = "";6 [SerializeField] protected bool value; //本来はジェネリック型(T)ですが、ここではboolとしてます。7 }8
試したこと・調べたこと
上記の詳細・結果
"value"をBool型ではなくstring型として判定しようと試みましたが、nullが格納されてしまいました。。
C#
1 if (typeName.Equals("System.Boolean"))2 {3 string value = json.GetField("value").str;4 5 Debug.Log(value); //「Null」で出力される。6 if(value.Equals("false")) SetBooleanVariable(key, false);7 if (value.Equals("true")) SetBooleanVariable(key, true);8 9 }
0 コメント