public async Task <BspFileLoadResult> Load(Stream stream, IEnvironment environment)
        {
            return(await Task.Factory.StartNew(() =>
            {
                var result = new BspFileLoadResult();

                var map = new Map();
                var so = _formatter.Deserialize(stream);
                foreach (var o in so)
                {
                    if (o.Name == nameof(Root))
                    {
                        map.Root.Unclone((Root)_factory.Deserialise(o));
                    }
                    else
                    {
                        map.Data.Add((IMapData)_factory.Deserialise(o));
                    }
                }
                map.Root.DescendantsChanged();

                result.Map = map;
                return result;
            }));
        }
 private IEnumerable <IMapObject> ExtractCopyStream(string str)
 {
     using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(str)))
     {
         try
         {
             var clip = _formatter.Deserialize(ms).First(x => x.Name == SerialisedName);
             return(clip.Children.Select(x => _factory.Deserialise(x)).OfType <IMapObject>());
         }
         catch
         {
             return(new IMapObject[0]);
         }
     }
 }