@@ -11,23 +11,40 @@ namespace System.Text.Json.Protobuf;
1111 private readonly FieldInfo [ ] _fields ;
1212 private readonly Dictionary < string , FieldInfo > _fieldsLookup ;
1313
14- public ProtobufConverter ( )
14+ public ProtobufConverter ( JsonNamingPolicy ? namingPolicy , JsonProtobufSerializerOptions options )
1515 {
1616 var propertyInfo = typeof ( T ) . GetProperty ( "Descriptor" , BindingFlags . Public | BindingFlags . Static ) ;
1717 var messageDescriptor = ( MessageDescriptor ) propertyInfo ? . GetValue ( null , null ) ! ;
1818
19+ var convertNameFunc = GetConvertNameFunc ( namingPolicy , options . UseProtobufJsonNames ) ;
20+
1921 _fields = messageDescriptor . Fields . InDeclarationOrder ( ) . Select ( fieldDescriptor => new FieldInfo
2022 {
2123 Accessor = fieldDescriptor . Accessor ,
2224 IsRepeated = fieldDescriptor . IsRepeated ,
2325 FieldType = GetFieldType ( fieldDescriptor ) ,
24- JsonName = fieldDescriptor . JsonName ,
26+ JsonName = convertNameFunc ( fieldDescriptor ) ,
2527 IsOneOf = fieldDescriptor . ContainingOneof != null
2628 } ) . ToArray ( ) ;
2729
2830 _fieldsLookup = _fields . ToDictionary ( x => x . JsonName , x => x ) ;
2931 }
3032
33+ private static Func < FieldDescriptor , string > GetConvertNameFunc ( JsonNamingPolicy ? jsonNamingPolicy , bool useProtobufJsonNames )
34+ {
35+ if ( useProtobufJsonNames )
36+ {
37+ return descriptor => descriptor . JsonName ;
38+ }
39+
40+ if ( jsonNamingPolicy != null )
41+ {
42+ return descriptor => jsonNamingPolicy . ConvertName ( descriptor . PropertyName ) ;
43+ }
44+
45+ return descriptor => descriptor . PropertyName ;
46+ }
47+
3148 public override T Read ( ref Utf8JsonReader reader , Type typeToConvert , JsonSerializerOptions options )
3249 {
3350 var obj = new T ( ) ;
0 commit comments