Beispiel #1
0
        public void RoundtripsPolymorphicTypesUsingDiscriminators()
        {
            serializer.EnableDiscriminators(
                new Discriminator <Base>("B"),
                new Discriminator <Derived1>("D1"),
                new Discriminator <Derived2>("D2"));

            var jObject = JObject.FromObject(new Base
            {
                BaseChild    = new Derived1(),
                BaseChildren = new List <Base>
                {
                    new Base(),
                    new Derived2(),
                }
            }, CreateSerializer());

            ((JObject)jObject["BaseChild"]).ShouldContainKeyAndValue("Discriminator", "D1");

            var jListWrapper = (JObject)jObject["BaseChildren"];
            var jList        = (JArray)jListWrapper["$values"];

            ((JObject)jList[0]).ShouldContainKeyAndValue("Discriminator", "B");
            ((JObject)jList[1]).ShouldContainKeyAndValue("Discriminator", "D2");

            var copy = jObject.ToObject <Base>(CreateSerializer());

            copy.BaseChild.ShouldBeOfType <Derived1>();
            copy.BaseChildren.ShouldBeOfType <List <Base> >();
            copy.BaseChildren[0].ShouldBeOfType <Base>();
            copy.BaseChildren[1].ShouldBeOfType <Derived2>();
        }