Exemplo n.º 1
0
        private static void PrepareMembersCallback(SharpYaml.Serialization.Descriptors.ObjectDescriptor objDesc, List <IMemberDescriptor> memberDescriptors)
        {
            var type = objDesc.Type;

            if (IdentifiableHelper.IsIdentifiable(type) && !typeof(IIdentifiable).IsAssignableFrom(type))
            {
                memberDescriptors.Add(CustomDynamicMemberDescriptor);
            }

            // Call custom callbacks to prepare members
            PrepareMembersEvent?.Invoke(objDesc, memberDescriptors);
        }
Exemplo n.º 2
0
        private void PrepareMembersCallback(ObjectDescriptor objDesc, List <IMemberDescriptor> memberDescriptors)
        {
            var type = objDesc.Type;

            if (ShadowId.IsTypeIdentifiable(type) && !typeof(IIdentifiable).IsAssignableFrom(type))
            {
                memberDescriptors.Add(customDynamicMemberDescriptor);
            }

            // Call custom callbacks to prepare members
            PrepareMembersEvent?.Invoke(objDesc, memberDescriptors);
        }
Exemplo n.º 3
0
        private void EnsureYamlSerializer()
        {
            lock (Lock)
            {
                if (serializer == null)
                {
                    // var clock = Stopwatch.StartNew();

                    var config = new SerializerSettings
                    {
                        EmitAlias = false,
                        LimitPrimitiveFlowSequence = 0,
                        Attributes                = new AttributeRegistry(),
                        PreferredIndent           = 4,
                        EmitShortTypeName         = true,
                        ComparerForKeySorting     = new DefaultMemberComparer(),
                        PreSerializer             = new ContextAttributeSerializer(),
                        PostSerializer            = new ErrorRecoverySerializer(),
                        SerializerFactorySelector = new ProfileSerializerFactorySelector(YamlSerializerFactoryAttribute.Default, "Assets"),
                        ChainedSerializerFactory  = x =>
                        {
                            var routingSerializer = x.FindNext <RoutingSerializer>();
                            if (routingSerializer == null)
                            {
                                throw new InvalidOperationException("RoutingSerializer expected in the chain of serializers");
                            }
                            // Prepend the IdentifiableObjectSerializer just before the routing serializer
                            routingSerializer.Prepend(new IdentifiableObjectSerializer());
                            // Prepend the ContextAttributeSerializer just before the routing serializer
                            routingSerializer.Prepend(new ContextAttributeSerializer());
                            // Prepend the ErrorRecoverySerializer at the beginning
                            routingSerializer.First.Prepend(new ErrorRecoverySerializer());
                        }
                    };

                    config.Attributes.PrepareMembersCallback += (objDesc, members) => PrepareMembersEvent?.Invoke(objDesc, members);

                    for (var index = RegisteredAssemblies.Count - 1; index >= 0; index--)
                    {
                        var registeredAssembly = RegisteredAssemblies[index];
                        config.RegisterAssembly(registeredAssembly);
                    }

                    var newSerializer = new Serializer(config);
                    newSerializer.Settings.ObjectSerializerBackend = new AssetObjectSerializerBackend(TypeDescriptorFactory.Default);

                    // Log.Info("New YAML serializer created in {0}ms", clock.ElapsedMilliseconds);
                    serializer = newSerializer;
                }
            }
        }