public static SampleChildA GetSampleChidA() { var sc = new SampleChildA(); sc.TextValue = Guid.NewGuid().ToString(); sc.NumberValue = _rnd.Next(); var x = _rnd.Next(); var y = _rnd.Next(); var z = _rnd.Next(); sc.rotation = 100.0f; return(sc); }
/// <summary> /// Polymorphism /// </summary> public void PolymorphicSerialization() { LogStart("Polymorphic Serialization"); try { var list = new List <SampleBase>(); for (var i = 0; i < 4; i++) { SampleChildB newChild = TestCaseUtils.GetSampleChid(); list.Add(newChild); // Debug.Log("origin color is " + newChild.curColor); } // add child A for (var i = 0; i < 3; i++) { SampleChildA newChild = TestCaseUtils.GetSampleChidA(); list.Add(newChild); } for (int i = 0; i < list.Count; i++) { list[i].UdpateCoolThing(); } var serialized = JsonConvert.SerializeObject(list, Formatting.None, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }); LogSerialized(serialized); List <SampleBase> newList = JsonConvert.DeserializeObject <List <SampleBase> >(serialized, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }); LogResult(list[2].TextValue, newList[2].TextValue); for (int i = 0; i < newList.Count; i++) { SampleBase objA = (newList[i]); objA.UdpateCoolThing(); } if (list[2].TextValue != newList[2].TextValue) { DisplayFail("Polymorphic Serialization", BAD_RESULT_MESSAGE); } else { DisplaySuccess("Polymorphic Serialization"); } Dictionary <int, SampleBase> testForDic = new Dictionary <int, SampleBase>(); for (var i = 0; i < 4; i++) { SampleChildB newChild = TestCaseUtils.GetSampleChid(); testForDic.Add(i, newChild); } // add child A for (var i = 6; i < 10; i++) { SampleChildA newChild = TestCaseUtils.GetSampleChidA(); testForDic.Add(i, newChild); } serialized = JsonConvert.SerializeObject(testForDic, Formatting.None, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects }); LogSerialized(serialized); Dictionary <int, SampleBase> newDic = JsonConvert.DeserializeObject <Dictionary <int, SampleBase> >(serialized, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects }); foreach (KeyValuePair <int, SampleBase> data in newDic) { if (data.Value.GetType() == typeof(SampleChildA)) { SampleChildA childAObject = data.Value as SampleChildA; childAObject.UpdateChildAState(); Debug.Log("this is sampleChildA class "); } else if (data.Value.GetType() == typeof(SampleChildB)) { Debug.Log("this is sampleChildB class "); } Debug.Log(" this item type is " + data.GetType()); data.Value.UdpateCoolThing(); } } catch (Exception ex) { DisplayFail("Polymorphic Serialization", ex.Message); throw; } LogEnd(3); }