</pre><pre code_snippet_id="1601018" snippet_file_name="blog_20160307_1_6633309" name="code" class="csharp">public class MyObject
{
public string name;
public MyNewObject newOjbect;
public san si;
}<pre name="code" class="csharp"><pre name="code" class="csharp">[System.Serializable]//这个加上好点
<pre name="code" class="csharp">public class MyNewObject{
public int level;
public san s;
}
public class san{
public int l = 333;
}
void Start ()
{
MyObject myObject = new MyObject();
myObject.name = "雨松MOMO";
myObject.newOjbect = new MyNewObject()
{
level = 100
};
myObject.newOjbect.s = new san();
myObject.si = new san();
myObject.si.l = 444;
string json = JsonUtility.ToJson(myObject);
Debug.Log(json);
json = JsonUtility.ToJson(myObject);
Debug.Log(json); //
myObject = JsonUtility.FromJson<MyObject>(json);//简单的反序列化。反序列化被执行一次后,json字段里的数据将被清除
JsonUtility.FromJsonOverwrite(json, myObject);//深度的反序列化。包含其他类的对象也会被赋值。
//请注意,JSON 序列化程序 API 支持 MonoBehaviour 和 ScriptableObject 的子类,
// 以及普通的结构类。但是,当反 JSON 序列化到 MonoBehaviour 或 ScriptableObject 的子类
// 则必须使用 FromJsonOverwrite; FromJson 不支持,并将引发异常。
Debug.Log(myObject.newOjbect.s.l); Debug.Log(myObject.si.l);
}
//private成员需要加上 [SerializeField]属性才能
SimpleJSon序列化List:
/// <summary>
/// 允许序列化List。
/// </summary>
/// <typeparam name="T">T必须要加上[System.Serializable]属性。否则不会被序列化</typeparam>
[System.Serializable]
public class Serialization<T>
{
[SerializeField]//强迫unity去序列化一个私有字段
List<T> target;
/// <summary>
///返回创建的list
/// </summary>
/// <returns></returns>
public List<T> ToList()
{
return target;
}
public Serialization(List<T> target)
{
this.target = target;
}
}
//====准备测试的数据========//
[System.Serializable]
class A
{
public int a = 111;
public B b = new B();
}
[System.Serializable]<span style="font-family: Arial, Helvetica, sans-serif;">//仅仅只是这个属性不会被继承,他的子类如果也想被序列化也要加上这个属性</span>
class B
{
public int b = 222;
}
[System.Serializable]<span style="font-family: Arial, Helvetica, sans-serif;">//如果子类添加了这个属性,他的父类则不用添加这个属性。</span>
class C:B
{
public int c = 333;
}
//=====测试代码===========
void Start () {
Serialization<C> s1 = new Serialization<C>(new List<C>());
s1.ToList().Add(new C());
string js = JsonUtility.ToJson(s1);
Debug.Log(js);
List<C> lb = JsonUtility.FromJson<Serialization<C>>(js).ToList();
// Serialization<A> serB = new Serialization<A>(new List<A>());
// JsonUtility.FromJsonOverwrite(js, serB);
Debug.Log(lb[0].b);//输出222
Debug.Log(lb[0].c);//输出333
}
SimpleJSon序列化Dictionary:
userReg = new UserRegister(userData);
Serialization<string, C> dy = new Serialization<string, C>(new Dictionary<string, C>());
dy.toDictionary().Add("c",new C());
string js = JsonUtility.ToJson(dy);
Serialization<string, C> dy2 = JsonUtility.FromJson<Serialization<string, C>>(js);
Debug.Log(dy2.toDictionary()["c"].c);