private Kanalisationindivid CreateKanalisationIndivid(BIS_Kanalisation p, string suffix)
        {
            Kanalisationindivid o = new Kanalisationindivid
            {
                name          = "Kanalisationindivid",
                versionId     = _VersionId,
                notering      = p.Notering,
                företeelsetyp = new ClassificationReference_Styckevara_företeelsetyp
                {
                    @class = new FTStyckevaraReference
                    {
                        instanceRef = "Kanalisationindivid",
                        softType    = "FTStyckevaraReference"
                    },
                    startSpecified = false,
                    endSpecified   = false
                }
            };

            o.id = o.name + suffix;
            return(o);
        }
        public override Container ObjectStructure(List <BIS_GrundObjekt> bisList)
        {
            var       formattedBisList = bisList;
            Container container        = new Container();
            //All softypes must be aggregated before they are added to the container
            var containerSoftTypes = new List <SoftType>();

            //Sort this mess out at some point
            var geoPlaceringar               = new List <GeografiskPlaceringsreferensInstances>();
            var plattformsProdukter          = new List <AnläggningsproduktInstances>();
            var plattformsFunktioner         = new List <FunktionellAnläggningInstances>();
            var plattformVäderskydd          = new List <AnläggningsproduktInstances>();
            var plattformStyckevaror         = new List <StyckevaraInstances>();
            var plattformSkylt               = new List <AnläggningsproduktInstances>();
            var plattformSkyltIndivid        = new List <StyckevaraInstances>();
            var plattformKanalisation        = new List <AnläggningsproduktInstances>();
            var plattformKanalisationIndivid = new List <StyckevaraInstances>();
            var plattformIndivider           = new List <StyckevaraInstances>();

            //Does all the real mapping against ANDA resources
            foreach (BIS_Plattform bisPlattform in formattedBisList)
            {
                var suffix = bisPlattform.ObjektTypNummer + bisPlattform.ObjektNummer + ExtraCounter;

                //Noterings fix
                bisPlattform.Notering = string.IsNullOrEmpty(bisPlattform.Notering)
          ? "Ingen Notering"
          : bisPlattform.Notering;

                var plattform = new Plattform
                {
                    name          = "Plattform",
                    notering      = bisPlattform.Notering,
                    versionId     = _VersionId,
                    företeelsetyp = new ClassificationReference_GeografiskPlaceringsreferens_företeelsetyp
                    {
                        startSpecified = false,
                        endSpecified   = false,
                        @class         = new FTGeografiskPlaceringsreferensReference
                        {
                            softType    = "FTGeografiskPlaceringsreferens",
                            instanceRef = "Plattform"
                        }
                    }
                };
                plattform.id = plattform.name + suffix;
                var plattformGPR = new GeografiskPlaceringsreferensEntrydefaultIn
                {
                    Array          = true,
                    id             = "Plattform" + suffix,
                    inputSchemaRef = _InputSchemaRef,
                    data           = plattform
                };
                geoPlaceringar.Add(plattformGPR);

                var plattformsProduktInstans = new AnläggningsproduktEntrydefaultIn
                {
                    Array          = true,
                    inputSchemaRef = _InputSchemaRef,
                    id             = "PlattformProduktAnläggningsprodukt" + suffix
                };

                var plattformprodukt = new Plattformprodukt
                {
                    notering  = bisPlattform.Notering,
                    name      = "Plattformprodukt",
                    versionId = _VersionId,
                    stringSet = new PlattformproduktStringSet
                    {
                        PlattformBeläggning    = SkapaPlattformBeläggning(bisPlattform, new Plattformprodukt_PlattformBeläggning()),
                        plattformskantMaterial = SkapaPlattformKantMaterial(bisPlattform, new Plattformprodukt_plattformskantMaterial()),
                        nominellHöjd           = new Plattformprodukt_nominellHöjd
                        {
                            generalProperty = new nominellHöjd
                            {
                                instanceRef = "nominellHöjd",
                                softType    = _SoftTypeProperty
                            },
                            value = bisPlattform.Höjd,
                            JSonMapToPropertyName = _JsonMapToValue
                        }
                    },
                    numericSet = new PlattformproduktNumericSet
                    {
                        verkligHöjd = SkapaVerkligHöjd(bisPlattform, new Plattformprodukt_verkligHöjd()),
                        längd       = new Plattformprodukt_längd
                        {
                            generalProperty = new längd
                            {
                                instanceRef = "längd",
                                softType    = _SoftTypeProperty
                            },
                            value = bisPlattform.Längd,
                            JSonMapToPropertyName = _JsonMapToValue,
                            Unit = new m
                            {
                                instanceRef = "m",
                                softType    = "Unit"
                            }
                        },
                        bredd = new Plattformprodukt_bredd
                        {
                            generalProperty = new bredd
                            {
                                instanceRef = "bredd",
                                softType    = _SoftTypeProperty
                            },
                            value = bisPlattform.Bredd,
                            JSonMapToPropertyName = _JsonMapToValue,
                            Unit = new m
                            {
                                instanceRef = "m",
                                softType    = "Unit"
                            }
                        }
                    },
                    företeelsetyp = new ClassificationReference_Anläggningsprodukt_företeelsetyp
                    {
                        startSpecified = false,
                        endSpecified   = false,
                        @class         = new FTAnläggningsproduktReference
                        {
                            softType    = "FTAnläggningsprodukt",
                            instanceRef = "Plattformprodukt"
                        }
                    }
                };
                plattformprodukt.id           = plattformprodukt.name + suffix;
                plattformsProduktInstans.data = plattformprodukt;
                plattformsProdukter.Add(plattformsProduktInstans);

                var plattformsFunktionInstans = new FunktionellAnläggningEntrydefaultIn
                {
                    Array          = true,
                    inputSchemaRef = _InputSchemaRef,
                    id             = "PlattformFunktionFunktionell" + suffix
                };

                var plattformFunktion = new Plattformfunktion
                {
                    notering  = bisPlattform.Notering,
                    name      = "PlattformFunktion",
                    versionId = _VersionId,
                    stringSet = new PlattformfunktionStringSet
                    {
                        harFotsteg = SkapaPlattformFotsteg(bisPlattform, new Plattformfunktion_harFotsteg()),
                        harPlattformsutrustning = SkapaPlattformUtrustning(bisPlattform, new Plattformfunktion_harPlattformsutrustning()),
                        harSkyddsräcken         = SkapaPlattformSkyddsräcken(bisPlattform, new Plattformfunktion_harSkyddsräcken())
                    },
                    numericSet    = new PlattformfunktionNumericSet(),
                    företeelsetyp = new ClassificationReference_FunktionellAnläggning_företeelsetyp
                    {
                        @class = new FTFunktionellAnläggningReference
                        {
                            softType    = "FTFunktionellAnläggning",
                            instanceRef = "Plattformfunktion"
                        }
                    }
                };
                plattformFunktion = SkyddzonOchLedstråk(bisPlattform, plattformFunktion, new Plattformfunktion_harLedstråk(), new Plattformfunktion_harSkyddszon());

                plattformFunktion.id           = plattformFunktion.name + suffix;
                plattformsFunktionInstans.data = plattformFunktion;
                plattformsFunktioner.Add(plattformsFunktionInstans);

                //Skydd eller Tak
                var plattformAnläggningsProduktInstans = new AnläggningsproduktEntrydefaultIn
                {
                    Array          = true,
                    id             = "PlattformVäderskyddOchSkärmtakAnläggningsprodukt" + suffix,
                    inputSchemaRef = _InputSchemaRef
                };

                var plattformStyckevaraInstans = new StyckevaraEntrydefaultIn
                {
                    Array          = true,
                    id             = "PlattformVäderskyddOchSkärmtakStyckevara" + suffix,
                    inputSchemaRef = _InputSchemaRef
                };

                var väderskyddProdukt = new Väderskyddprodukt
                {
                    name          = "Väderskyddprodukt",
                    notering      = bisPlattform.Notering,
                    versionId     = _VersionId,
                    företeelsetyp = new ClassificationReference_Anläggningsprodukt_företeelsetyp
                    {
                        startSpecified = false,
                        endSpecified   = false,
                        @class         = new FTAnläggningsproduktReference
                        {
                            softType    = "FTAnläggningsprodukt",
                            instanceRef = "Väderskyddprodukt"
                        }
                    }
                };
                väderskyddProdukt.id = väderskyddProdukt.name + suffix;

                var väderskyddIndivid = new Väderskyddindivid
                {
                    startSpecified = false,
                    endSpecified   = false,
                    name           = "Väderskyddindivid",
                    notering       = bisPlattform.Notering,
                    versionId      = _VersionId,
                    företeelsetyp  = new ClassificationReference_Styckevara_företeelsetyp
                    {
                        startSpecified = false,
                        endSpecified   = false,
                        @class         = new FTStyckevaraReference
                        {
                            softType    = "FTStyckevara",
                            instanceRef = "Väderskyddindivid"
                        }
                    }
                };
                väderskyddIndivid.id = väderskyddIndivid.name + suffix;

                var skärmtakProdukt = new Skärmtakprodukt
                {
                    name          = "Skärmtakprodukt",
                    notering      = bisPlattform.Notering,
                    versionId     = _VersionId,
                    företeelsetyp = new ClassificationReference_Anläggningsprodukt_företeelsetyp
                    {
                        startSpecified = false,
                        endSpecified   = false,
                        @class         = new FTAnläggningsproduktReference
                        {
                            softType    = "FTAnläggningsprodukt",
                            instanceRef = "Skärmtakprodukt"
                        }
                    }
                };
                skärmtakProdukt.id = skärmtakProdukt.name + suffix;

                var skärmtakIndivid = new Skärmtakindivid
                {
                    startSpecified = false,
                    endSpecified   = false,
                    name           = "Skärmtakindivid",
                    notering       = bisPlattform.Notering,
                    versionId      = _VersionId,
                    företeelsetyp  = new ClassificationReference_Styckevara_företeelsetyp
                    {
                        startSpecified = false,
                        endSpecified   = false,
                        @class         = new FTStyckevaraReference
                        {
                            softType    = "FTStyckevara",
                            instanceRef = "Skärmtakindivid"
                        }
                    }
                };
                skärmtakIndivid.id = skärmtakIndivid.name + suffix;

                switch (bisPlattform.Väderskydd)
                {
                case "Skydd":
                    plattformAnläggningsProduktInstans.data = väderskyddProdukt;
                    plattformStyckevaraInstans.data         = väderskyddIndivid;
                    break;

                case "Tak":
                    plattformAnläggningsProduktInstans.data = skärmtakProdukt;
                    plattformStyckevaraInstans.data         = skärmtakIndivid;
                    break;
                }
                plattformVäderskydd.Add(plattformAnläggningsProduktInstans);
                plattformStyckevaror.Add(plattformStyckevaraInstans);
                //End Väderskydd

                //Skylt
                var skyltProdukt = new Fast_skyltprodukt
                {
                    name          = "Fast_skyltprodukt",
                    notering      = bisPlattform.Notering,
                    versionId     = _VersionId,
                    företeelsetyp = new ClassificationReference_Anläggningsprodukt_företeelsetyp
                    {
                        startSpecified = false,
                        endSpecified   = false,
                        @class         = new FTAnläggningsproduktReference
                        {
                            softType    = "FTAnläggningsprodukt",
                            instanceRef = "Fast_skyltprodukt"
                        }
                    }
                };
                skyltProdukt.id = skyltProdukt.name + suffix;

                var skyltIndivid = new Fast_skyltindivid
                {
                    startSpecified = false,
                    endSpecified   = false,
                    name           = "Fast_skyltindivid",
                    notering       = bisPlattform.Notering,
                    versionId      = _VersionId,
                    företeelsetyp  = new ClassificationReference_Styckevara_företeelsetyp
                    {
                        startSpecified = false,
                        endSpecified   = false,
                        @class         = new FTStyckevaraReference
                        {
                            softType    = "FTStyckevara",
                            instanceRef = "Fast_skyltindivid"
                        }
                    }
                };
                skyltIndivid.id = skyltIndivid.name + suffix;

                var plattformSkyltAnläggningsProdukt = new AnläggningsproduktEntrydefaultIn
                {
                    Array          = true,
                    id             = "PlattformSkyltAnläggningsprodukt" + suffix,
                    inputSchemaRef = _InputSchemaRef,
                    data           = skyltProdukt
                };
                var plattformSkyltStyckevara = new StyckevaraEntrydefaultIn
                {
                    Array          = true,
                    id             = "PlattformSkyltStyckevara" + suffix,
                    inputSchemaRef = _InputSchemaRef,
                    data           = skyltIndivid
                };
                if (bisPlattform.Skylt != "?")
                {
                    plattformSkylt.Add(plattformSkyltAnläggningsProdukt);
                    plattformSkyltIndivid.Add(plattformSkyltStyckevara);
                }

                //Kanalisation (BrunOLock)
                var kanalisationsProdukt = new Kanalisationprodukt
                {
                    name          = "Kanalisationprodukt",
                    notering      = bisPlattform.Notering,
                    versionId     = _VersionId,
                    stringSet     = new KanalisationproduktStringSet(),
                    numericSet    = new KanalisationproduktNumericSet(),
                    företeelsetyp = new ClassificationReference_Anläggningsprodukt_företeelsetyp
                    {
                        startSpecified = false,
                        endSpecified   = false,
                        @class         = new FTAnläggningsproduktReference
                        {
                            softType    = "FTAnläggningsprodukt",
                            instanceRef = "Kanalisationprodukt"
                        }
                    }
                };
                kanalisationsProdukt.id = kanalisationsProdukt.name + suffix;
                var kanalisationsIndivid = new Kanalisationindivid
                {
                    name           = "Kanalisationindivid",
                    notering       = bisPlattform.Notering,
                    versionId      = _VersionId,
                    startSpecified = false,
                    endSpecified   = false,
                    företeelsetyp  = new ClassificationReference_Styckevara_företeelsetyp
                    {
                        startSpecified = false,
                        endSpecified   = false,
                        @class         = new FTStyckevaraReference
                        {
                            softType    = "FTStyckevara",
                            instanceRef = "Kanalisationindivid"
                        }
                    }
                };
                kanalisationsIndivid.id = kanalisationsIndivid.name + suffix;

                var plattformKanalisationProdukt = new AnläggningsproduktEntrydefaultIn
                {
                    Array          = true,
                    id             = "PlattformKanalisationAnläggningsprodukt" + suffix,
                    inputSchemaRef = _InputSchemaRef,
                    data           = kanalisationsProdukt
                };
                var plattformKanalisationStyckevara = new StyckevaraEntrydefaultIn
                {
                    Array          = true,
                    id             = "PlattformKanalisationStyckevara" + suffix,
                    inputSchemaRef = _InputSchemaRef,
                    data           = kanalisationsIndivid
                };
                if (bisPlattform.Brunn_Och_Lock != "?")
                {
                    plattformKanalisation.Add(plattformKanalisationProdukt);
                    plattformKanalisationIndivid.Add(plattformKanalisationStyckevara);
                }

                //PlattformIndivid
                var plattformindivid = new Plattformindivid
                {
                    startSpecified = false,
                    endSpecified   = false,
                    name           = "Plattformindivid",
                    notering       = bisPlattform.Notering,
                    versionId      = _VersionId,
                    företeelsetyp  = new ClassificationReference_Styckevara_företeelsetyp
                    {
                        startSpecified = false,
                        endSpecified   = false,
                        @class         = new FTStyckevaraReference
                        {
                            softType    = "FTStyckevara",
                            instanceRef = "Plattformindivid"
                        }
                    }
                };
                plattformindivid.id = plattformindivid.name + suffix;

                var plattformIndividStyckevara = new StyckevaraEntrydefaultIn
                {
                    Array          = true,
                    id             = "PlattformIndividStyckevara" + suffix,
                    inputSchemaRef = _InputSchemaRef,
                    data           = plattformindivid
                };
                plattformIndivider.Add(plattformIndividStyckevara);

                ExtraCounter++;
            }
            var anläggningsProduktSoftType = new SoftType_Anläggningsprodukt
            {
                Array     = true,
                id        = "Anläggningsprodukt",
                instances = plattformsProdukter.ToArray()
            };
            var funktionellAnläggningsSoftType = new SoftType_FunktionellAnläggning
            {
                Array     = true,
                id        = "FunktionellAnläggning",
                instances = plattformsFunktioner.ToArray()
            };
            var anläggningsProduktSoftTypeSkydd = new SoftType_Anläggningsprodukt
            {
                Array     = true,
                id        = "Anläggningsprodukt",
                instances = plattformVäderskydd.ToArray()
            };
            var styckevaraProduktSoftType = new SoftType_Styckevara
            {
                Array     = true,
                id        = "Styckevara",
                instances = plattformStyckevaror.ToArray()
            };
            var anläggningsProduktSTSkylt = new SoftType_Anläggningsprodukt
            {
                Array     = true,
                id        = "Anläggningsprodukt",
                instances = plattformSkylt.ToArray()
            };
            var styckevaraProduktSTSkylt = new SoftType_Styckevara
            {
                Array     = true,
                id        = "Styckevara",
                instances = plattformSkyltIndivid.ToArray()
            };
            var anläggningsProduktKanalisation = new SoftType_Anläggningsprodukt
            {
                Array     = true,
                id        = "Anläggningsprodukt",
                instances = plattformKanalisation.ToArray()
            };
            var styckevaraProduktKanalisation = new SoftType_Styckevara
            {
                Array     = true,
                id        = "Styckevara",
                instances = plattformKanalisationIndivid.ToArray()
            };
            var plattformIndivid = new SoftType_Styckevara
            {
                Array     = true,
                id        = "Styckevara",
                instances = plattformIndivider.ToArray()
            };
            var geoPlaceringSoftType = new SoftType_GeografiskPlaceringsreferens
            {
                Array     = true,
                id        = "GeografiskPlaceringsreferens",
                instances = geoPlaceringar.ToArray()
            };

            containerSoftTypes.Add(anläggningsProduktSoftType);
            containerSoftTypes.Add(funktionellAnläggningsSoftType);
            containerSoftTypes.Add(anläggningsProduktSoftTypeSkydd);
            containerSoftTypes.Add(styckevaraProduktSoftType);
            containerSoftTypes.Add(anläggningsProduktSTSkylt);
            containerSoftTypes.Add(styckevaraProduktSTSkylt);
            containerSoftTypes.Add(anläggningsProduktKanalisation);
            containerSoftTypes.Add(styckevaraProduktKanalisation);
            containerSoftTypes.Add(plattformIndivid);
            containerSoftTypes.Add(geoPlaceringSoftType);

            //Adds the extra softypes needed
            containerSoftTypes.AddRange(CreateSupplementarySoftypes());
            containerSoftTypes.AddRange(CreateFTKeyReferenceSoftTypes());

            //Last step is to prepare the container for serialization
            container.softTypes = containerSoftTypes.ToArray();
            return(container);
        }