SLJsonNode Clone(SLJsonNode parent) { var res = new SLJsonNode(parent); res.m_NodeType = m_NodeType; res.m_Value = m_Value; res.m_Index = m_Index; res.m_Name = m_Name; // Do not copy m_Monitor here! if (m_Array != null) { res.m_Array = CreateArray(); foreach (SLJsonNode n in m_Array) { #if DEBUG if (n.m_Parent != this) { throw new InvalidOperationException(); } #endif res.m_Array.Add(n.Clone(res)); } } if (m_Object != null) { res.m_Object = CreateObject(); foreach (string k in m_Object.Keys) { SLJsonNode n = TryGetObjectProperty(k); #if DEBUG if (n.m_Parent != this) { throw new InvalidOperationException(); } #endif res.m_Object.Add(k, n.Clone(res)); } } return(res); }
public void Run() { Test = new UnitTestHelper(); Test.PrintHeadline("UnitTest3 - Reflection-based Serialization"); var o1 = new ExampleOuter() { ValueString = "Test", ValueStringArray = new string[] { "A", "B,", "C" }, ValueDoubleArray = new double[] { 2, 3.14, 10000 }, PropertyInteger = 27, PropertyDateTime = new DateTime(2017, 12, 27, 14, 30, 0), }; o1.ValueObject = new ExampleInner(2); o1.ValueObjectArray = new ExampleInner[] { new ExampleInner(4), new ExampleInner(6) }; o1.ChangePrivateValue(2.345f); string s1 = Serialize(o1); //Console.WriteLine(s1); var d = new SLJsonDeserializer(); ExampleOuter o2 = d.Deserialize <ExampleOuter>(s1); string s2 = Serialize(o1); Test.Assert(() => s1 == s2); SLJsonNode n1 = SLJsonParser.Parse(s1); SLJsonNode n2 = n1.Clone(); SLJsonNode n3 = SLJsonParser.Parse(n2.AsJson); SLJsonNode n4 = SLJsonParser.Parse(n3.AsJsonCompact); Test.Assert(() => n1 != n2); CompareNodes(n1, n1); CompareNodes(n1, n2); CompareNodes(n1, n3); CompareNodes(n1, n4); //Console.WriteLine(); Test.PrintSummary(); Test = null; }