コード例 #1
0
        private static object Deserialize(string yaml)
        {
            var stream = new MemoryStream();
            var writer = new StreamWriter(stream);

            writer.Write(yaml);
            writer.Flush();
            stream.Position = 0;
            bool aliasOccurred;
            AttachedYamlAssetMetadata metadata;
            var instance = new YamlAssetSerializer().Load(stream, "MyAsset", null, true, out aliasOccurred, out metadata);

            return(instance);
        }
コード例 #2
0
            protected override bool ProcessObject(object obj, Type expectedType)
            {
                foreach (var unloadedObject in ItemsToReload)
                {
                    // If a collection, stop at parent path level (since index will be already removed, we will never visit the target slot)
                    // TODO: Check if the fact we didn't enter in an item with index affect visitor states
                    // Other case, stop on the actual member (since we'll just visit null)
                    var expectedPath = unloadedObject.Path.Decompose().Last().GetIndex() != null ? unloadedObject.ParentPath : unloadedObject.Path;

                    if (CurrentPath.Match(expectedPath))
                    {
                        var eventReader = new EventReader(new MemoryParser(unloadedObject.ParsingEvents));
                        var settings    = Log != null ? new SerializerContextSettings {
                            Logger = Log
                        } : null;
                        PropertyContainer properties;
                        unloadedObject.UpdatedObject = AssetYamlSerializer.Default.Deserialize(eventReader, null, unloadedObject.ExpectedType, out properties, settings);
                        // We will have broken references here because we are deserializing objects individually, so we don't pass any logger to discard warnings
                        var metadata = YamlAssetSerializer.CreateAndProcessMetadata(properties, unloadedObject.UpdatedObject, false);

                        var overrides = metadata.RetrieveMetadata(AssetObjectSerializerBackend.OverrideDictionaryKey);
                        unloadedObject.Overrides = overrides;

                        var references = metadata.RetrieveMetadata(AssetObjectSerializerBackend.ObjectReferencesKey);
                        if (references != null)
                        {
                            var basePath = YamlAssetPath.FromMemberPath(CurrentPath, root);
                            foreach (var reference in references)
                            {
                                var basePathWithIndex = basePath.Clone();
                                if (unloadedObject.GraphPathIndex != NodeIndex.Empty)
                                {
                                    if (unloadedObject.ItemId == ItemId.Empty)
                                    {
                                        basePathWithIndex.PushIndex(unloadedObject.GraphPathIndex.Value);
                                    }
                                    else
                                    {
                                        basePathWithIndex.PushItemId(unloadedObject.ItemId);
                                    }
                                }
                                var actualPath = basePathWithIndex.Append(reference.Key);
                                ObjectReferences.Set(actualPath, reference.Value);
                            }
                        }
                    }
                }
                return(false);
            }
コード例 #3
0
        public void TestSimpleSerialization()
        {
            var asset = new MyAsset {
                Strings = { "aa", "bb" }
            };
            var asset1Ids = CollectionItemIdHelper.GetCollectionItemIds(asset.Strings);

            asset1Ids.Add(0, new ItemId(MakeArray(1)));
            asset1Ids.Add(1, new ItemId(MakeArray(2)));
            var serializer = new YamlAssetSerializer();
            var stream     = new MemoryStream();

            serializer.Save(stream, asset, null);
            stream.Position = 0;
            bool aliasOccurred;
            AttachedYamlAssetMetadata metadata;
            var loadedAsset = (MyAsset)serializer.Load(stream, null, null, true, out aliasOccurred, out metadata);
            var asset2Ids   = CollectionItemIdHelper.GetCollectionItemIds(loadedAsset.Strings);

            Assert.Equal(2, asset2Ids.KeyCount);
            Assert.Equal(asset1Ids[0], asset2Ids[0]);
            Assert.Equal(asset1Ids[1], asset2Ids[1]);
        }
コード例 #4
0
ファイル: TestDerivedAssets.cs プロジェクト: thuskey/xenko
        public void TestSimpleSerialization()
        {
            var asset = new MyAsset {
                Strings = { "aa", "bb" }
            };
            var asset1Ids = CollectionItemIdHelper.GetCollectionItemIds(asset.Strings);

            asset1Ids.Add(0, new ItemId(MakeArray(1)));
            asset1Ids.Add(1, new ItemId(MakeArray(2)));
            var serializer = new YamlAssetSerializer();
            var stream     = new MemoryStream();

            serializer.Save(stream, asset);
            stream.Position = 0;
            bool aliasOccurred;
            Dictionary <YamlAssetPath, OverrideType> overrides;
            var loadedAsset = (MyAsset)serializer.Load(stream, null, null, out aliasOccurred, out overrides);
            var asset2Ids   = CollectionItemIdHelper.GetCollectionItemIds(loadedAsset.Strings);

            Assert.AreEqual(2, asset2Ids.KeyCount);
            Assert.AreEqual(asset1Ids[0], asset2Ids[0]);
            Assert.AreEqual(asset1Ids[1], asset2Ids[1]);
        }