private bool ReadConfig()
        {
            // Ensure config file exist
            if (!File.Exists(_configFile))
            {
                return(false);
            }

            // Deserialize configuration file
            try
            {
                using (var fs = File.OpenRead(_configFile))
                {
                    // TODO: Validate config
                    _config = (SerializerGenerationConfiguration) new XmlSerializer(typeof(SerializerGenerationConfiguration)).Deserialize(fs);
                    _serializerClassFullName = $"{_config.SerializersNameSpace}.{_config.SerializationType}StaticSerializer";
                    _config.ModuleClassName  = _config.ModuleClassName ?? "Module";
                }
            }
            catch (Exception e)
            {
                throw new Exception("Invalid static deserializer configuration file ({0})".InvariantCultureFormat(_configFile), e);
            }

            return(true);
        }
        public override ISerializerGenerator GetCustomSerializerGenerator(SerializerGenerationConfiguration config, string serializerProviderFullName, SourceFileMetadata generatedCodeMeta)
        {
            var generator = new StaticJsonCustomDeserializerGenerator(
                config.SerializersNameSpace,
                generatedCodeMeta,
                serializerProviderFullName
                );

            PropertyGenerators.Add(new RecursiveStaticSerializerGenerator(generator));

            return(generator);
        }
        public override IStaticSerializerResolver GetGenerator(
            SerializerGenerationConfiguration config,
            RoslynMetadataHelper metadataHelper,
            SourceFileMetadata generatedCodeMeta)
        {
            var generator = new StaticJsonSerializerGenerator(
                metadataHelper,
                config.SerializersNameSpace,
                config.DisableToUpperConstructor,
                PropertyFinder,
                PropertyGenerators,
                generatedCodeMeta
                );

            PropertyGenerators.Add(new RecursiveStaticSerializerGenerator(generator));

            return(generator);
        }
        public static SerializationType CreateInstance(this SerializerGenerationConfiguration configuration, RoslynMetadataHelper helper)
        {
            switch (configuration.SerializationType)
            {
            case SerializationTypeName.Json:
                return(new JsonSerializationType
                {
                    Name = "Json",
                    PropertyFinder = new DefaultPropertyFinder(),
                    StaticDeserializerPropertyFinder = new JsonStaticDeserializerPropertyFinder(),
                    CustomDeserializerPropertyFinder = new JsonCustomDeserializerPropertyFinder(),
                    PropertyGenerators = new List <IValueSerializationGenerator>
                    {
                        // Note: Generators are used in the order of the registration.
                        // Be sure to put "special cases" before "generic cases"
                        //
                        // For instance, put the MicrosoftDateTimeGenerator before the JsonReaderGenerator
                        // which also handles DateTime, but does not validate the attribute.

                        new CustomSerializerGenerator(),                                 // This must be the first in order to be able to override all types

                        new UriGenerator(),
                        new GuidGenerator(),
                        new EnumGenerator(new Enums(string.Empty, true, true, null, new DefaultPropertyFinder(), null)),
                        new MicrosotDateTimeGenerator(configuration.UseTryParseOrDefault),
                        new DateTimeGenerator(configuration.UseTryParseOrDefault),

                        new JsonCollectionGenerator(new CollectionImplementationResolver(helper)),

                        new JsonReaderGenerator(configuration.UseTryParseOrDefault),
                        new JsonWriterGenerator(),
                    }
                });

            default:
                throw new ArgumentOutOfRangeException("typeName", "Unknwon serialization type.");
            }
        }
 public abstract ISerializerGenerator GetCustomSerializerGenerator(SerializerGenerationConfiguration config, string serializerProviderFullName, SourceFileMetadata metadata);
 public abstract IStaticSerializerResolver GetBuilderGenerator(SerializerGenerationConfiguration config, RoslynMetadataHelper metadataHelper, SourceFileMetadata metadata);