Ejemplo n.º 1
0
        public void SerializeAndDeserialize_MultidimensionalArray()
        {
            var src = new ClassWithMultidimensionalArray
            {
                MultidimensionalArrayInt32 = new[, ]
                {
                    { 1, 2 },
                    { 3, 4 }
                }
            };

            var parameters = new JsonSerializationParameters
            {
                UserDefinedAdapters = new List <IJsonAdapter>
                {
                    new Array2Adapter <int>()
                }
            };

            var json = JsonSerialization.ToJson(src, parameters);

            Assert.That(UnFormat(json), Is.EqualTo("{\"MultidimensionalArrayInt32\":[[1,2],[3,4]]}"));

            var dst = default(ClassWithMultidimensionalArray);

            JsonSerialization.FromJsonOverride(json, ref dst, parameters);
            Assert.That(dst.MultidimensionalArrayInt32, Is.EqualTo(new [, ]
            {
                { 1, 2 },
                { 3, 4 }
            }));
        }
        public void SerializeAndDeserialize_WithUserDefinedAdapter_AdapterIsInvoked()
        {
            var jsonSerializationParameters = new JsonSerializationParameters
            {
                UserDefinedAdapters = new List <IJsonAdapter>
                {
                    new DummyAdapter(),
                    new TestAdapter()
                }
            };

            var src = new ClassWithAdaptedTypes
            {
                Value = new ClassWithAdapters {
                    A = 42
                }
            };

            var json = JsonSerialization.ToJson(src, jsonSerializationParameters);

            Assert.That(UnFormat(json), Is.EqualTo(@"{""Value"":42}"));

            var dst = JsonSerialization.FromJson <ClassWithAdaptedTypes>(json, jsonSerializationParameters);

            Assert.That(dst.Value.A, Is.EqualTo(src.Value.A));
        }
Ejemplo n.º 3
0
        public void ToJson_ScriptableObjectWithDisableRootAdapters_DoesNotThrow()
        {
            var src = ScriptableObject.CreateInstance <TestUnityObject>();
            var dst = ScriptableObject.CreateInstance <TestUnityObject>();

            src.Int32Value = 100;

            try
            {
                var parameters = new JsonSerializationParameters
                {
                    DisableRootAdapters = true
                };

                var json = JsonSerialization.ToJson(src, parameters);
                Assert.That(UnFormat(json), Is.EqualTo("{\"Int32Value\":100}"));

                JsonSerialization.FromJsonOverride(json, ref dst, parameters);
                Assert.That(dst.Int32Value, Is.EqualTo(src.Int32Value));

                /* @TODO uncomment when TypeConstruction lands
                 * var clone = JsonSerialization.FromJson<TestUnityObject>(json, parameters);
                 * Assert.That(clone.Int32Value, Is.EqualTo(src.Int32Value));
                 */
            }
            finally
            {
                Object.DestroyImmediate(src);
            }
        }
        public void SerializeAndDeserialize_WithMultipleUserDefinedAdapters_OnlyTheFirstAdapterIsInvoked()
        {
            var jsonSerializationParameters = new JsonSerializationParameters
            {
                UserDefinedAdapters = new List <IJsonAdapter>
                {
                    // The order is important here.
                    new TestInverter(),
                    new TestAdapter(),
                    new TestDecorator()
                }
            };

            var src = new ClassWithAdaptedTypes
            {
                Value = new ClassWithAdapters {
                    A = 42
                }
            };

            var json = JsonSerialization.ToJson(src, jsonSerializationParameters);

            Assert.That(UnFormat(json), Is.EqualTo(@"{""Value"":-42}"));

            var dst = JsonSerialization.FromJson <ClassWithAdaptedTypes>(json, jsonSerializationParameters);

            Assert.That(dst.Value.A, Is.EqualTo(src.Value.A));
        }
Ejemplo n.º 5
0
        public void SerializeAndDeserialize_WithContravariantUserDefinedAdapter_AdapterIsInvokedCorrectly()
        {
            var jsonSerializationParameters = new JsonSerializationParameters
            {
                UserDefinedAdapters = new List <IJsonAdapter>
                {
                    new DummyAdapter(),
                    new ShapeAdapter(),
                    new AnimalAdapter()
                }
            };

            var src = new ClassWithShapes
            {
                Shape  = new Square(),
                Square = new Square(),
                Circle = new Circle(),

                Animal = new Cat(),
                Dog    = new Dog(),
                Cat    = null
            };

            var json = JsonSerialization.ToJson(src, jsonSerializationParameters);

            Assert.That(UnFormat(json), Is.EqualTo(@"{""Shape"":""a shape"",""Square"":""a shape"",""Circle"":""a shape"",""Animal"":""an animal"",""Dog"":""a dog"",""Cat"":""a cat""}"));
        }
Ejemplo n.º 6
0
 public SceneVisitor(Transform sceneRoot, UnsafeValueView view, List <DeserializationEvent> events,
                     JsonSerializationParameters parameters, SerializationMetadata metadata) : base(metadata)
 {
     SetView(view);
     SetEvents(events);
     m_Events     = events;
     m_SceneRoot  = sceneRoot;
     m_Parameters = parameters;
 }
 public GameObjectVisitor(UnsafeValueView view, List <DeserializationEvent> events, SerializationMetadata metadata,
                          Transform parent, GameObjectContainer prefabRoot, JsonSerializationParameters parameters) : base(metadata)
 {
     SetView(view);
     SetEvents(events);
     m_Events     = events;
     m_Parameters = parameters;
     m_Parent     = parent;
     m_PrefabRoot = prefabRoot;
 }
        protected override T SerializeAndDeserialize <T>(T value, CommonSerializationParameters parameters = default)
        {
            var jsonSerializationParameters = new JsonSerializationParameters
            {
                DisableSerializedReferences = parameters.DisableSerializedReferences
            };

            var json = JsonSerialization.ToJson(value, jsonSerializationParameters);

            return(JsonSerialization.FromJson <T>(json, jsonSerializationParameters));
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Alternative method to JsonSerialization.ToJson which uses JsonSceneWriter
        /// Use this if you need to support `ISerializationCallbacks`
        /// </summary>
        /// <param name="value">The value to serialize</param>
        /// <param name="metadata">SerializationMetadata for this call</param>
        /// <typeparam name="T">The type of the value being serialized</typeparam>
        /// <returns>A string containing the Json serialized representation of `value`</returns>
        public static string ToJson <T>(T value, SerializationMetadata metadata = null)
        {
            var parameters = new JsonSerializationParameters
            {
                DisableRootAdapters         = true,
                DisableSerializedReferences = true
            };

            using (var writer = new JsonStringBuffer(parameters.InitialCapacity, Allocator.Temp))
            {
                var container = new PropertyWrapper <T>(value);

                var visitor = new JsonSceneWriter(metadata);

                visitor.SetStringWriter(writer);
                visitor.SetSerializedType(parameters.SerializedType);
                visitor.SetMinified(parameters.Minified);
                visitor.SetSimplified(parameters.Simplified);

                using (visitor.Lock()) PropertyContainer.Visit(ref container, visitor);
                return(writer.ToString());
            }
        }
        public void SerializeAndDeserialize_WithReEntranceAdapter_SerializedReferencesAreNotCleared()
        {
            var parameters = new JsonSerializationParameters
            {
                UserDefinedAdapters = new List <IJsonAdapter>
                {
                    new FooAdapter()
                }
            };

            var reference = new Dummy();

            var src = new ClassWithObjectReferences
            {
                ObjectReference1 = reference,
                ObjectReference2 = reference,
                Foo = new Foo
                {
                    A = 42,

                    // Despite being the same reference, the adapter triggers a re-entrance and handles serialization in it's own tree.
                    B = reference
                }
            };

            var json = JsonSerialization.ToJson(src, parameters);

            var dst = JsonSerialization.FromJson <ClassWithObjectReferences>(json, parameters);

            Assert.That(dst, Is.Not.SameAs(src));
            Assert.That(dst.ObjectReference1, Is.SameAs(dst.ObjectReference2));
            Assert.That(dst.Foo.A, Is.EqualTo(42));

            // Despite being the same reference in src, the adapter triggers a re-entrance and handles which should create a new instance.
            Assert.That(dst.Foo.B, Is.Not.SameAs(dst.ObjectReference1));
        }