예제 #1
0
 protected IEnumerable <IYamlTypeConverter> BuildTypeConverters()
 {
     if (typeConvertersCache == null)
     {
         typeConvertersCache = typeConverterFactories.BuildComponentList();
     }
     return(typeConvertersCache);
 }
예제 #2
0
 /// <summary>
 /// Creates a new <see cref="IValueDeserializer" /> that implements the current configuration.
 /// This method is available for advanced scenarios. The preferred way to customize the behavior of the
 /// deserializer is to use the <see cref="Build" /> method.
 /// </summary>
 public IValueDeserializer BuildValueDeserializer()
 {
     return(new AliasValueDeserializer(
                new NodeValueDeserializer(
                    nodeDeserializerFactories.BuildComponentList(),
                    nodeTypeResolverFactories.BuildComponentList()
                    )
                ));
 }
예제 #3
0
            public void SerializeValue(IEmitter emitter, object value, Type type)
            {
                var actualType = type != null ? type : value != null ? value.GetType() : typeof(object);
                var staticType = type ?? typeof(object);

                var graph = new ObjectDescriptor(value, actualType, staticType);

                var preProcessingPhaseObjectGraphVisitors = preProcessingPhaseObjectGraphVisitorFactories.BuildComponentList(typeConverters);
                foreach (var visitor in preProcessingPhaseObjectGraphVisitors)
                {
                    traversalStrategy.Traverse(graph, visitor, null);
                }

                ObjectSerializer nestedObjectSerializer = (v, t) => SerializeValue(emitter, v, t);

                var emittingVisitor = emissionPhaseObjectGraphVisitorFactories.BuildComponentChain(
                    new EmittingObjectGraphVisitor(eventEmitter),
                    inner => new EmissionPhaseObjectGraphVisitorArgs(inner, eventEmitter, preProcessingPhaseObjectGraphVisitors, typeConverters, nestedObjectSerializer)
                );

                traversalStrategy.Traverse(graph, emittingVisitor, emitter);
            }
예제 #4
0
            public void SerializeValue(IEmitter emitter, object value, Type type)
            {
                Type             type2      = (type != null) ? type : ((value == null) ? typeof(object) : value.GetType());
                Type             staticType = type ?? typeof(object);
                ObjectDescriptor graph      = new ObjectDescriptor(value, type2, staticType);
                List <IObjectGraphVisitor <Nothing> > preProcessingPhaseObjectGraphVisitors = preProcessingPhaseObjectGraphVisitorFactories.BuildComponentList(typeConverters);

                foreach (IObjectGraphVisitor <Nothing> item in preProcessingPhaseObjectGraphVisitors)
                {
                    traversalStrategy.Traverse(graph, item, null);
                }
                ObjectSerializer nestedObjectSerializer = delegate(object v, Type t)
                {
                    SerializeValue(emitter, v, t);
                };
                IObjectGraphVisitor <IEmitter> visitor = emissionPhaseObjectGraphVisitorFactories.BuildComponentChain(new EmittingObjectGraphVisitor(eventEmitter), (IObjectGraphVisitor <IEmitter> inner) => new EmissionPhaseObjectGraphVisitorArgs(inner, eventEmitter, preProcessingPhaseObjectGraphVisitors, typeConverters, nestedObjectSerializer));

                traversalStrategy.Traverse(graph, visitor, emitter);
            }
예제 #5
0
 protected IEnumerable <IYamlTypeConverter> BuildTypeConverters()
 {
     return(typeConverterFactories.BuildComponentList());
 }