@@ -17,7 +17,7 @@ namespace Protobuf.System.Text.Json;
1717 public ProtobufConverter ( JsonSerializerOptions jsonSerializerOptions , JsonProtobufSerializerOptions jsonProtobufSerializerOptions )
1818 {
1919 _defaultIgnoreCondition = jsonSerializerOptions . DefaultIgnoreCondition ;
20-
20+
2121 var type = typeof ( T ) ;
2222
2323 var propertyTypeLookup = type . GetProperties ( ) . ToDictionary ( x => x . Name , x => x . PropertyType ) ;
@@ -27,14 +27,20 @@ public ProtobufConverter(JsonSerializerOptions jsonSerializerOptions, JsonProtob
2727
2828 var convertNameFunc = GetConvertNameFunc ( jsonSerializerOptions . PropertyNamingPolicy , jsonProtobufSerializerOptions . UseProtobufJsonNames ) ;
2929
30- _fields = messageDescriptor . Fields . InDeclarationOrder ( ) . Select ( fieldDescriptor => new FieldInfo
30+ _fields = messageDescriptor . Fields . InDeclarationOrder ( ) . Select ( fieldDescriptor =>
3131 {
32- Accessor = fieldDescriptor . Accessor ,
33- IsRepeated = fieldDescriptor . IsRepeated ,
34- IsMap = fieldDescriptor . IsMap ,
35- FieldType = FieldTypeResolver . ResolverFieldType ( fieldDescriptor , propertyTypeLookup ) ,
36- JsonName = convertNameFunc ( fieldDescriptor ) ,
37- IsOneOf = fieldDescriptor . ContainingOneof != null
32+ var fieldInfo = new FieldInfo
33+ {
34+ Accessor = fieldDescriptor . Accessor ,
35+ IsRepeated = fieldDescriptor . IsRepeated ,
36+ EnumType = jsonProtobufSerializerOptions . UseStringProtoEnumValueNames ? fieldDescriptor . EnumType : null ,
37+ IsMap = fieldDescriptor . IsMap ,
38+ FieldType = FieldTypeResolver . ResolverFieldType ( fieldDescriptor , propertyTypeLookup ) ,
39+ JsonName = convertNameFunc ( fieldDescriptor ) ,
40+ IsOneOf = fieldDescriptor . ContainingOneof != null ,
41+ } ;
42+ fieldInfo . Converter = InternalConverterFactory . Create ( fieldInfo , jsonSerializerOptions ) ;
43+ return fieldInfo ;
3844 } ) . ToArray ( ) ;
3945
4046 var stringComparer = jsonSerializerOptions . PropertyNameCaseInsensitive ? StringComparer . OrdinalIgnoreCase : StringComparer . Ordinal ;
@@ -98,7 +104,6 @@ private static Func<FieldDescriptor, string> GetConvertNameFunc(JsonNamingPolicy
98104 }
99105
100106 reader . Read ( ) ;
101- fieldInfo . Converter ??= InternalConverterFactory . Create ( fieldInfo ) ;
102107 fieldInfo . Converter . Read ( ref reader , obj , fieldInfo . FieldType , options , fieldInfo . Accessor ) ;
103108 }
104109
@@ -128,7 +133,6 @@ public override void Write(Utf8JsonWriter writer, T? value, JsonSerializerOption
128133 if ( _defaultIgnoreCondition is JsonIgnoreCondition . Never or not JsonIgnoreCondition . WhenWritingDefault )
129134 {
130135 writer . WritePropertyName ( fieldInfo . JsonName ) ;
131- fieldInfo . Converter ??= InternalConverterFactory . Create ( fieldInfo ) ;
132136 fieldInfo . Converter . Write ( writer , propertyValue , options ) ;
133137 }
134138 }
0 commit comments