【Unity】JsonUtilityの[Serializable]について
7041 ワード
はじめに
- リストをJSONで送信するにはクラスを囲うラッパーが必要.
- しかし,サーバー側ではJsonUtilityがうまく働かずに空のJson
{}
が返ってきていた問題を解決.
開発環境
- Unity 2019.4.23f
動いたコード
クラス定義の部分
class.cs
// ↓これがないと空の要素になる
[System.Serializable]
public class Tverts{
public float x;
public float y;
public float z;
public Tverts(float a,float b,float c){
x=a;
y=b;
z=c;
}
}
// ↓これがないと空の要素になる
[System.Serializable]
public class Tfaces{
public int f1;
public int f2;
public int f3;
public Tfaces(int a,int b,int c){
f1=a;
f2=b;
f3=c;
}
}
// ラッパークラス
public class Wrapper
{
public List<Tverts> tverts;
public List<Tfaces> tfaces;
}
クラスの使用部分
_.cs
Wrapper test = new Wrapper();
test.tverts = new List<Tverts>();
test.tfaces = new List<Tfaces>();
test.tfaces.Add(new Tfaces(1,1,1));
test.tverts.Add(new Tverts(1.0f,1.0f,1.0f));
string testjson = JsonUtility.ToJson(test);
_.JSON
{"tverts":[{"x":1.0,"y":1.0,"z":1.0,"weight":0.0}],"tfaces":[{"f1":1,"f2":1,"f3":1}]}
つまりどういうこと?
ラッパーされる側のクラスには[Serializable]
が無いとJSON化できない(空のJsonが返ってくる).ただしJsonUtility.ToJson()
に渡すクラス(Object)は[Serializable]
されている必要がない(Publicで宣言されていればOK).
*ただしUnty公式ではJson化する全てのオブジェクトを[Serializable]するよう勧めているので,おとなしくすべて[Serializable]しましょう.
Author And Source
この問題について(【Unity】JsonUtilityの[Serializable]について), 我々は、より多くの情報をここで見つけました https://qiita.com/sanjolin_chun/items/046c08db7f563e2f0689著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .