| 
					
				 | 
			
			
				@@ -62,6 +62,7 @@ namespace Google.Protobuf.Reflection 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private readonly IList<EnumDescriptor> enumTypes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private readonly IList<FieldDescriptor> fieldsInDeclarationOrder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private readonly IList<FieldDescriptor> fieldsInNumberOrder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private readonly IDictionary<string, FieldDescriptor> jsonFieldMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private readonly FieldCollection fields; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private readonly IList<OneofDescriptor> oneofs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // CLR representation of the type described by this descriptor, if any. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -95,6 +96,8 @@ namespace Google.Protobuf.Reflection 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 (field, index) => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 new FieldDescriptor(field, file, this, index, generatedCodeInfo == null ? null : generatedCodeInfo.PropertyNames[index])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             fieldsInNumberOrder = new ReadOnlyCollection<FieldDescriptor>(fieldsInDeclarationOrder.OrderBy(field => field.FieldNumber).ToArray()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // TODO: Use field => field.Proto.JsonName when we're confident it's appropriate. (And then use it in the formatter, too.) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonFieldMap = new ReadOnlyDictionary<string, FieldDescriptor>(fieldsInNumberOrder.ToDictionary(field => JsonFormatter.ToCamelCase(field.Name))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             file.DescriptorPool.AddSymbol(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             fields = new FieldCollection(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -255,6 +258,18 @@ namespace Google.Protobuf.Reflection 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return messageDescriptor.fieldsInNumberOrder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // TODO: consider making this public in the future. (Being conservative for now...) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /// <value> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /// Returns a read-only dictionary mapping the field names in this message as they're used 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /// in the JSON representation to the field descriptors. For example, a field <c>foo_bar</c> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /// in the message would result in an entry with a key <c>fooBar</c>. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /// </value> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            internal IDictionary<string, FieldDescriptor> ByJsonName() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return messageDescriptor.jsonFieldMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             /// Retrieves the descriptor for the field with the given number. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             /// </summary> 
			 |