public void First_Level_Nested_Objects_Should_Work()
        {
            var flatObject = new Dictionary <string, string>()
            {
                { "Address_Street", "Victory Street" },
                { "Address_PhoneNumber", "321321423" },
                { "Username", "John" },
                { "Email", "*****@*****.**" },
            };
            var unflattenedObject = new ObjectFlattener <User, string>()
                                    .MapProperty(nameof(User.Username), new StringPropertyMap <User>((u, v) => { u.Username = v; return(u); }))
                                    .MapProperty(nameof(User.Email), new StringPropertyMap <User>((u, v) => { u.Email = v; return(u); }))
                                    .MapNested(nameof(User.Address), new GenericConstructorMap <User, Address>(() => new Address(), (u, v) => { u.Address = v; return(u); }))
                                    .MapProperty("Address_Street", new StringPropertyMap <Address>((u, v) => { u.Street = v; return(u); }))
                                    .MapProperty("Address_PhoneNumber", new Int32PropertyMap <Address>((u, v) => { u.PhoneNumber = v; return(u); }))
                                    .Unflatten(flatObject);

            Assert.AreEqual("John", unflattenedObject.Username);
            Assert.AreEqual("*****@*****.**", unflattenedObject.Email);
            var address = unflattenedObject.Address;

            Assert.IsNotNull(address);
            Assert.AreEqual("Victory Street", address.Street);
            Assert.AreEqual(321321423, address.PhoneNumber);
        }
Exemple #2
0
 public MapperContext(NamingSettings namingSettings = null)
 {
     Cache               = new CacheSet();
     DataSources         = new DataSourceFinder();
     NamingSettings      = namingSettings ?? new NamingSettings();
     RootMembersSource   = new RootMembersSource(new RootQualifiedMemberFactory(this));
     ObjectMapperFactory = new ObjectMapperFactory(this);
     ObjectFlattener     = new ObjectFlattener();
     DerivedTypes        = new DerivedTypesCache();
     UserConfigurations  = new UserConfigurationSet();
     ValueConverters     = new ConverterSet();
     RuleSets            = new MappingRuleSetCollection();
 }
        public void Simple_Objects_Are_Same()
        {
            var flatObject = new Dictionary <string, string>()
            {
                { "Username", "John" },
                { "Email", "*****@*****.**" }
            };
            var unflattenedObject = new ObjectFlattener <User, string>()
                                    .MapProperty(nameof(User.Username), new StringPropertyMap <User>((u, v) => { u.Username = v; return(u); }))
                                    .MapProperty(nameof(User.Email), new StringPropertyMap <User>((u, v) => { u.Email = v; return(u); }))
                                    .Unflatten(flatObject);

            Assert.AreEqual("John", unflattenedObject.Username);
            Assert.AreEqual("*****@*****.**", unflattenedObject.Email);
        }
        public void Nested_Lists_Within_Nested_Lists_Should_Work()
        {
            var flatObject = new Dictionary <string, string>()
            {
                { "Address_Country_Symbol", "ro" },
                { "Address_Country_Name", "Romania" },
                { "Address_Country_Taxes_0_Rate", "9" },
                { "Address_Street", "Victory Street" },
                { "Address_PhoneNumber", "321321423" },
                { "Address_Ids_0", "1" },
                { "Address_Ids_1", "2" },
                { "Username", "John" },
                { "Email", "*****@*****.**" },
                { "Countries_0_Symbol", "en" },
                { "Countries_0_Name", "UK" },
                { "Countries_0_Taxes_0_Rate", "1,2" },
                { "Countries_0_Taxes_1_Rate", "2,2" },
                { "Countries_1_Symbol", "us" },
                { "Countries_1_Name", "USA" },
                { "Countries_1_Taxes_0_Rate", "3,19" },
                { "Countries_1_Taxes_1_Rate", "4,19" },
            };
            var unflattenedObject = new ObjectFlattener <User, string>()
                                    .MapProperty(nameof(User.Username), new StringPropertyMap <User>((u, v) => { u.Username = v; return(u); }))
                                    .MapProperty(nameof(User.Email), new StringPropertyMap <User>((u, v) => { u.Email = v; return(u); }))
                                    .MapNested(nameof(User.Address), new GenericConstructorMap <User, Address>(() => new Address(), (u, v) => { u.Address = v; return(u); }))
                                    .MapProperty("Address_Street", new StringPropertyMap <Address>((u, v) => { u.Street = v; return(u); }))
                                    .MapProperty("Address_PhoneNumber", new Int32PropertyMap <Address>((u, v) => { u.PhoneNumber = v; return(u); }))
                                    .MapNested("Address_Country", new GenericConstructorMap <Address, Country>(() => new Country(), (u, v) => { u.Country = v; return(u); }))
                                    .MapProperty("Address_Country_Symbol", new StringPropertyMap <Country>((u, v) => { u.Symbol = v; return(u); }))
                                    .MapProperty("Address_Country_Name", new StringPropertyMap <Country>((u, v) => { u.Name = v; return(u); }))
                                    .MapNested("Address_Ids", new GenericConstructorMap <Address, List <int> >(() => new List <int>(), (u, v) => { u.Ids = v; return(u); }))
                                    .MapProperty("Address_Ids_*", new Int32PropertyMap <List <int> >((u, v) => { u.Add(v); return(u); }))
                                    .MapNested("Countries", new GenericConstructorMap <User, List <Country> >(() => new List <Country>(), (u, v) => { u.Countries = v; return(u); }))
                                    .MapNested("Countries_*", new GenericConstructorMap <List <Country>, Country>(() => new Country(), (u, v) => { u.Add(v); return(u); }))
                                    .MapProperty("Countries_*_Symbol", new StringPropertyMap <Country>((u, v) => { u.Symbol = v; return(u); }))
                                    .MapProperty("Countries_*_Name", new StringPropertyMap <Country>((u, v) => { u.Name = v; return(u); }))
                                    .MapNested("Countries_*_Taxes", new GenericConstructorMap <Country, List <Tax> >(() => new List <Tax>(), (u, v) => { u.Taxes = v; return(u); }))
                                    .MapNested("Countries_*_Taxes_*", new GenericConstructorMap <List <Tax>, Tax>(() => new Tax(), (u, v) => { u.Add(v); return(u); }))
                                    .MapProperty("Countries_*_Taxes_*_Rate", new DecimalPropertyMap <Tax>((u, v) => { u.Rate = v; return(u); }))
                                    .MapNested("Address_Country_Taxes", new GenericConstructorMap <Country, List <Tax> >(() => new List <Tax>(), (u, v) => { u.Taxes = v; return(u); }))
                                    .MapNested("Address_Country_Taxes_*", new GenericConstructorMap <List <Tax>, Tax>(() => new Tax(), (u, v) => { u.Add(v); return(u); }))
                                    .MapProperty("Address_Country_Taxes_*_Rate", new DecimalPropertyMap <Tax>((u, v) => { u.Rate = v; return(u); }))
                                    .Unflatten(flatObject);

            Assert.AreEqual("John", unflattenedObject.Username);
            Assert.AreEqual("*****@*****.**", unflattenedObject.Email);
            var address = unflattenedObject.Address;

            Assert.IsNotNull(address);
            Assert.AreEqual("Victory Street", address.Street);
            Assert.AreEqual(321321423, address.PhoneNumber);
            var country = address.Country;

            Assert.IsNotNull(country);
            Assert.AreEqual("ro", country.Symbol);
            Assert.AreEqual("Romania", country.Name);
            var listOfTaxes = country.Taxes;

            Assert.IsNotNull(listOfTaxes);
            Assert.AreEqual(1, listOfTaxes.Count);
            Assert.AreEqual(9, listOfTaxes[0].Rate);
            var ids = address.Ids;

            Assert.IsNotNull(ids);
            Assert.AreEqual(2, ids.Count);
            Assert.AreEqual(1, ids[0]);
            Assert.AreEqual(2, ids[1]);
            var countries = unflattenedObject.Countries;

            Assert.IsNotNull(countries);
            Assert.AreEqual(2, countries.Count);
            Assert.AreEqual("UK", countries[0].Name);
            Assert.AreEqual("en", countries[0].Symbol);
            var firstNestedTaxes = countries[0].Taxes;

            Assert.IsNotNull(firstNestedTaxes);
            Assert.AreEqual(2, firstNestedTaxes.Count);
            Assert.AreEqual(1.2m, firstNestedTaxes[0].Rate);
            Assert.AreEqual(2.2m, firstNestedTaxes[1].Rate);
            Assert.AreEqual("USA", countries[1].Name);
            Assert.AreEqual("us", countries[1].Symbol);
            var secondNestedTaxes = countries[1].Taxes;

            Assert.IsNotNull(secondNestedTaxes);
            Assert.AreEqual(2, secondNestedTaxes.Count);
            Assert.AreEqual(3.19m, secondNestedTaxes[0].Rate);
            Assert.AreEqual(4.19m, secondNestedTaxes[1].Rate);
        }