|
@@ -62,6 +62,7 @@ namespace Google.Protobuf.Reflection
|
|
private readonly IList<EnumDescriptor> enumTypes;
|
|
private readonly IList<EnumDescriptor> enumTypes;
|
|
private readonly IList<FieldDescriptor> fieldsInDeclarationOrder;
|
|
private readonly IList<FieldDescriptor> fieldsInDeclarationOrder;
|
|
private readonly IList<FieldDescriptor> fieldsInNumberOrder;
|
|
private readonly IList<FieldDescriptor> fieldsInNumberOrder;
|
|
|
|
+ private readonly IDictionary<string, FieldDescriptor> jsonFieldMap;
|
|
private readonly FieldCollection fields;
|
|
private readonly FieldCollection fields;
|
|
private readonly IList<OneofDescriptor> oneofs;
|
|
private readonly IList<OneofDescriptor> oneofs;
|
|
// CLR representation of the type described by this descriptor, if any.
|
|
// CLR representation of the type described by this descriptor, if any.
|
|
@@ -95,6 +96,8 @@ namespace Google.Protobuf.Reflection
|
|
(field, index) =>
|
|
(field, index) =>
|
|
new FieldDescriptor(field, file, this, index, generatedCodeInfo == null ? null : generatedCodeInfo.PropertyNames[index]));
|
|
new FieldDescriptor(field, file, this, index, generatedCodeInfo == null ? null : generatedCodeInfo.PropertyNames[index]));
|
|
fieldsInNumberOrder = new ReadOnlyCollection<FieldDescriptor>(fieldsInDeclarationOrder.OrderBy(field => field.FieldNumber).ToArray());
|
|
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);
|
|
file.DescriptorPool.AddSymbol(this);
|
|
fields = new FieldCollection(this);
|
|
fields = new FieldCollection(this);
|
|
}
|
|
}
|
|
@@ -255,6 +258,18 @@ namespace Google.Protobuf.Reflection
|
|
return messageDescriptor.fieldsInNumberOrder;
|
|
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>
|
|
/// <summary>
|
|
/// Retrieves the descriptor for the field with the given number.
|
|
/// Retrieves the descriptor for the field with the given number.
|
|
/// </summary>
|
|
/// </summary>
|