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); }
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); }
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; } } }