public void Generic_object_serialization_with_anonymous_of_anonymous_types_does_not_throws()
        {
            var changeset = new DomainEvent[]
            {
                new SampleEvent("ciao"),
                new SampleEvent("foo")
            };
            ClassWithAnonymousType classWithAnonymousType = new ClassWithAnonymousType()
            {
                DomainEvents = new[] { "foo", "bar" },
                ExtraData    = new
                {
                    Events = changeset.Select(evt => new
                    {
                        evt.GetType().Name,
                        Data = evt
                    }).ToArray(),
                }
            };
            var serialized        = JsonConvert.SerializeObject(classWithAnonymousType, GetSettingsForTest());
            var defaultSerialized = JsonConvert.SerializeObject(classWithAnonymousType, GetDefaultSettingsWithFullSerialization());

            Console.WriteLine(serialized);
            Console.WriteLine(defaultSerialized);

            ClassWithAnonymousType test = JsonConvert.DeserializeObject <ClassWithAnonymousType>(defaultSerialized, GetDefaultSettingsWithFullSerialization());

            Assert.DoesNotThrow(() => JsonConvert.DeserializeObject <ClassWithAnonymousType>(serialized, GetSettingsForTest()));
        }
        public void Generic_object_serialization_with_anonymous_types_does_not_throws()
        {
            ClassWithAnonymousType classWithAnonymousType = new ClassWithAnonymousType()
            {
                DomainEvents = new[] { "foo", "bar" },
                ExtraData    = new
                {
                    Property = "this is a property"
                }
            };
            var serialized        = JsonConvert.SerializeObject(classWithAnonymousType, GetSettingsForTest());
            var defaultSerialized = JsonConvert.SerializeObject(classWithAnonymousType, GetDefaultSettingsWithFullSerialization());

            Console.WriteLine("CUSTOM SERIALIZATION");
            Console.WriteLine(serialized);

            Console.WriteLine("\n\nDEFAULT SERIALIZATION");
            Console.WriteLine(defaultSerialized);

            // if the serialization content contains netcore type, we failed...
            Assert.That(!serialized.Contains("System.Private.CoreLib"));

            Assert.DoesNotThrow(() => JsonConvert.DeserializeObject <ClassWithAnonymousType>(serialized, GetSettingsForTest()));
            var deserialized = JsonConvert.DeserializeObject <ClassWithAnonymousType>(serialized, GetSettingsForTest());

            Assert.That(deserialized.ExtraData.GetPropertyValue("Property"), Is.EqualTo("this is a property"));
        }
        public void Generic_object_serialization_with_complex_anonymous_types_and_linq()
        {
            ClassWithAnonymousType classWithAnonymousType = new ClassWithAnonymousType()
            {
                DomainEvents = new[] { "foo", "bar" },
                ExtraData    = new
                {
                    Id           = "Document_123",
                    ContainerId  = "Container_2134",
                    CreationUser = "******",
                    IsInDraft    = true,
                    Workflows    = new[] { "a", "b" }
                }
            };
            var serialized        = JsonConvert.SerializeObject(classWithAnonymousType, GetSettingsForTest());
            var defaultSerialized = JsonConvert.SerializeObject(classWithAnonymousType, GetDefaultSettingsWithFullSerialization());

            Console.WriteLine("CUSTOM SERIALIZATION");
            Console.WriteLine(serialized);

            Console.WriteLine("\n\nDEFAULT SERIALIZATION");
            Console.WriteLine(defaultSerialized);

            // if the serialization content contains netcore type, we failed...
            Assert.That(!serialized.Contains("System.Private.CoreLib"));

            Assert.DoesNotThrow(() => JsonConvert.DeserializeObject <ClassWithAnonymousType>(serialized, GetSettingsForTest()));
            var deserialized = JsonConvert.DeserializeObject <ClassWithAnonymousType>(serialized, GetSettingsForTest());

            Assert.That(deserialized.ExtraData.GetPropertyValue("IsInDraft"), Is.EqualTo(true));
            Assert.That(deserialized.ExtraData.GetPropertyValue("Workflows"), Is.EqualTo(new[] { "a", "b" }));
        }
        public void Generic_object_serialization()
        {
            ClassWithAnonymousType classWithAnonymousType = new ClassWithAnonymousType()
            {
                DomainEvents = new[] { "foo", "bar" },
                ExtraData    = new SomeData()
                {
                    Property = "this is a property"
                }
            };
            var serialized = JsonConvert.SerializeObject(classWithAnonymousType, GetSettingsForTest());

            Console.WriteLine(serialized);

            var deserialized = JsonConvert.DeserializeObject <ClassWithAnonymousType>(serialized, GetSettingsForTest());

            Assert.That(deserialized.ExtraData, Is.InstanceOf <SomeData>());
            Assert.That(((SomeData)deserialized.ExtraData).Property, Is.EqualTo("this is a property"));
        }