private string FormatInternal(Type type, Func <TypeSpec, TypeSpec> rewriter = null) { string runtimeType = null; foreach (var converter in _converters) { if (converter.TryFormat(type, out var value)) { runtimeType = value; break; } } if (string.IsNullOrWhiteSpace(runtimeType)) { runtimeType = RuntimeTypeNameFormatter.Format(type); } var runtimeTypeSpec = RuntimeTypeNameParser.Parse(runtimeType); var displayTypeSpec = RuntimeTypeNameRewriter.Rewrite(runtimeTypeSpec, _convertToDisplayName); if (rewriter is object) { displayTypeSpec = rewriter(displayTypeSpec); } var formatted = displayTypeSpec.Format(); return(formatted); }
public TypeConverter(IEnumerable <ITypeConverter> formatters, IConfiguration <SerializerConfiguration> configuration) { _converters = formatters.ToArray(); _convertToDisplayName = ConvertToDisplayName; _convertFromDisplayName = ConvertFromDisplayName; _wellKnownAliasToType = new Dictionary <QualifiedType, QualifiedType>(); _wellKnownTypeToAlias = new Dictionary <QualifiedType, QualifiedType>(); var aliases = configuration.Value.WellKnownTypeAliases; foreach (var item in aliases) { var alias = new QualifiedType(null, item.Key); var spec = RuntimeTypeNameParser.Parse(RuntimeTypeNameFormatter.Format(item.Value)); string asmName = null; if (spec is AssemblyQualifiedTypeSpec asm) { asmName = asm.Assembly; spec = asm.Type; } var originalQualifiedType = new QualifiedType(asmName, spec.Format()); _wellKnownTypeToAlias[originalQualifiedType] = alias; if (asmName is { Length: > 0 })
public TypeCodec(ITypeResolver typeResolver) { this.typeResolver = typeResolver; this.getTypeKey = type => new TypeKey(Encoding.UTF8.GetBytes(RuntimeTypeNameFormatter.Format(type))); }