private async Task DeserializeAsync(Stream stream, Type type, Reference reference)
        {
            InternalXamlSchemaContext xamlSchemaContext = new InternalXamlSchemaContext(this, reference);

            XamlObjectWriter writer = new XamlObjectWriter(xamlSchemaContext);
            XamlXmlReader    reader = new XamlXmlReader(stream, xamlSchemaContext);

            XamlServices.Transform(reader, writer);

            if (type == typeof(object) && writer.Result is Asset || !type.IsInstanceOfType(writer.Result))
            {
                if (!(writer.Result is Asset asset))
                {
                    throw new InvalidOperationException();
                }

                reference.Object = await asset.CreateAssetAsync(Services);
            }
            else
            {
                reference.Object = writer.Result;
            }

            loadedAssetReferences[reference.Object] = reference;
        }
        internal async Task SerializeAsync(string path, object obj)
        {
            using (Stream stream = await FileProvider.OpenStreamAsync(path + FileExtension, FileMode.Create, FileAccess.ReadWrite))
            {
                InternalXamlSchemaContext xamlSchemaContext = new InternalXamlSchemaContext(this);

                XmlWriter xmlWriter = XmlWriter.Create(stream, new XmlWriterSettings {
                    Indent = true
                });
                XamlXmlWriter    writer = new XamlXmlWriter(xmlWriter, xamlSchemaContext);
                XamlObjectReader reader = new XamlObjectReader(obj, xamlSchemaContext);

                XamlServices.Transform(reader, writer);
            }

            Reference reference = new Reference(path, obj, true);

            AddReference(reference);
        }
        internal async Task SerializeAsync(string path, object obj)
        {
            using (Stream stream = await RootFolder.OpenStreamForWriteAsync(path + FileExtension, Windows.Storage.CreationCollisionOption.ReplaceExisting))
            {
                InternalXamlSchemaContext xamlSchemaContext = new InternalXamlSchemaContext(this);

                XmlWriter xmlWriter = XmlWriter.Create(stream, new XmlWriterSettings {
                    Indent = true
                });
                XamlXmlWriter    writer = new XamlXmlWriter(xmlWriter, xamlSchemaContext);
                XamlObjectReader reader = new XamlObjectReader(obj, xamlSchemaContext);

                XamlServices.Transform(reader, writer);
            }

            Reference reference = new Reference(path, obj, true);

            AddReference(reference);
        }
        private async Task DeserializeAsync(Stream stream, object rootObjectInstance, Reference reference)
        {
            InternalXamlSchemaContext xamlSchemaContext = new InternalXamlSchemaContext(this, reference);

            XamlObjectWriter writer = new XamlObjectWriter(xamlSchemaContext, new XamlObjectWriterSettings
            {
                RootObjectInstance = rootObjectInstance
            });

            XamlXmlReader reader = new XamlXmlReader(stream, xamlSchemaContext);

            XamlServices.Transform(reader, writer);

            if (rootObjectInstance != reference.Object)
            {
                if (!(rootObjectInstance is Asset asset))
                {
                    throw new InvalidOperationException();
                }

                await asset.CreateAssetAsync(reference.Object, Services);
            }
        }