예제 #1
0
        static ManagedGameObjectIO()
        {
            var serializer_ = new SerializerBuilder();

            var typeInspectorFactories_ = serializer_.GetType().GetField("typeInspectorFactories", BindingFlags.NonPublic | BindingFlags.Instance);
            var typeInspectorFactories  = typeInspectorFactories_.GetValue(serializer_);


            var Add = typeInspectorFactories.GetType().GetMethod("Add", BindingFlags.Public | BindingFlags.Instance);

            Add.Invoke(typeInspectorFactories, new object[] {
                typeof(YamlAttributesTypeInspector),
                new Func <ITypeInspector, ITypeInspector>((ITypeInspector inner) => new YamlAttributesTypeInspector(inner))
            });

            var Remove = typeInspectorFactories.GetType().GetMethod("Remove", BindingFlags.Public | BindingFlags.Instance);

            Remove.Invoke(typeInspectorFactories, new object[] {
                typeof(YamlDotNet.Serialization.YamlAttributesTypeInspector)
            });

#if DEBUG
            var _namingConvention = serializer_.GetType().GetField("namingConvention", BindingFlags.NonPublic | BindingFlags.Instance);
            var namingConvention  = _namingConvention.GetValue(serializer_) as INamingConvention;
            var objectGraphTraversalStrategyFactory = (ObjectGraphTraversalStrategyFactory)((ITypeInspector typeInspector, ITypeResolver typeResolver, IEnumerable <IYamlTypeConverter> typeConverters, int maximumRecursion) => new Debug_TraversalStrategy(typeInspector, typeResolver, maximumRecursion, namingConvention));
            serializer_.WithObjectGraphTraversalStrategyFactory(objectGraphTraversalStrategyFactory);
#endif

            m_Serializer = serializer_.Build();

            var deserializer_      = new DeserializerBuilder();
            var BuildTypeInspector = deserializer_.GetType().GetMethod("BuildTypeInspector", BindingFlags.NonPublic | BindingFlags.Instance);
            deserializer_.WithNodeDeserializer(new ManagedGameObject_Deserializer(BuildTypeInspector.Invoke(deserializer_, new object[] { }) as ITypeInspector));
            m_Deserializer = deserializer_.Build();
        }
        internal static T Parse <T>(StreamReader streamReader)
        {
            var deserializer = new DeserializerBuilder();

            deserializer.WithTypeConverter(new YamlTypeConverterRegex());
            deserializer.WithTypeConverter(new YamlTypeConverterTupleRegexString());
            deserializer.WithNodeDeserializer(inner => new ValidatingNodeDeserializer(inner), s => s.InsteadOf <ObjectNodeDeserializer>());
            return(deserializer.Build().Deserialize <T>(streamReader));
        }
예제 #3
0
 public static DeserializerBuilder WithSerializationEventSupport(this DeserializerBuilder builder)
 {
     return(builder
            .WithNodeDeserializer(inner => new EventSupportingNodeDeserializer(inner),
                                  s => s.InsteadOf <ObjectNodeDeserializer>()));
 }
 public static DeserializerBuilder WithRequiredPropertyValidation(this DeserializerBuilder builder)
 {
     return(builder
            .WithNodeDeserializer(inner => new ValidatingDeserializer(inner),
                                  s => s.InsteadOf <ObjectNodeDeserializer>()));
 }