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 string GetRead(string target, IPropertySymbol targetProperty, IValueSerializationGeneratorContext context)
        {
            var serializerType = FindCustomSerializerType(targetProperty);

            if (serializerType != null)
            {
                return($@"{target}.{targetProperty.Name} = {StaticJsonCustomDeserializerGenerator.GetClassName(serializerType)}.Instance.Deserialize(
					{context.Read.Reader},
					{context.Read.FirstChar},
					out {context.Read.OverChar});"                    );
            }

            return(null);
        }
        public string GetWrite(string sourceName, string source, IPropertySymbol sourceProperty, IValueSerializationGeneratorContext context)
        {
            var serializerType = FindCustomSerializerType(sourceProperty);

            if (serializerType != null)
            {
                var value = VariableHelper.GetName(sourceProperty.Type);
                return($@"
					var {value} = {source}.{sourceProperty.Name};
					if ({value} != null)
					{{
						{context.Write.Object}.WritePropertyName(""{sourceName}"");
						{StaticJsonCustomDeserializerGenerator.GetClassName(serializerType)}.Instance.Serialize({context.Write.Writer}, {value});
					}}"                    );
            }

            return(null);
        }
        private void ConfigureGenerators()
        {
            _typeGenerator             = (StaticJsonSerializerGenerator)_serializationTypeInstance.GetGenerator(_config, _roslynHelper, GetMetadata <StaticJsonSerializerGenerator>());
            _builderGenerator          = (StaticJsonBuilderSerializerGenerator)_serializationTypeInstance.GetBuilderGenerator(_config, _roslynHelper, GetMetadata <StaticJsonSerializerGenerator>());;
            _customSerializerGenerator = (StaticJsonCustomDeserializerGenerator)_serializationTypeInstance.GetCustomSerializerGenerator(_config, _serializerClassFullName, GetMetadata <StaticJsonCustomDeserializerGenerator>());
            _enumsGenerator            = new Enums(_config.SerializersNameSpace, _config.UseTryParseOrDefault, _config.IsMissingFallbackOnEnumsAllowed, GetMetadata <Enums>(), _serializationTypeInstance.PropertyFinder, _fallbackValueOverrides);
            _valueTypeGenerator        = new ValueTypeSerializersGenerator(_config.SerializersNameSpace, _roslynHelper, _config.UseTryParseOrDefault, GetMetadata <ValueTypeSerializersGenerator>());

            _serializerGenerator = new SerializerGenerator(
                _serializerClassFullName,
                new CompositeStaticSerializerResolver(_valueTypeGenerator, _enumsGenerator, _customSerializerGenerator, _builderGenerator, _typeGenerator),
                _collections,
                new JsonCollectionGenerator(_collections),
                _config.IsImmutablesAtRootDisabled,
                _roslynHelper,
                GetMetadata <SerializerGenerator>());
            _moduleGenerator = new ModuleGenerator(_config.SerializersNameSpace, GetMetadata <ModuleGenerator>());
        }