From 730c38ad8c11429bc7ea0310bc1b82f0831b42a6 Mon Sep 17 00:00:00 2001 From: Jon Skeet Date: Fri, 15 Jan 2016 10:41:56 +0000 Subject: Support (and test) numeric enum parsing in JSON --- csharp/src/Google.Protobuf/JsonParser.cs | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'csharp/src/Google.Protobuf/JsonParser.cs') diff --git a/csharp/src/Google.Protobuf/JsonParser.cs b/csharp/src/Google.Protobuf/JsonParser.cs index f7ebd057..25afd0f2 100644 --- a/csharp/src/Google.Protobuf/JsonParser.cs +++ b/csharp/src/Google.Protobuf/JsonParser.cs @@ -608,6 +608,15 @@ namespace Google.Protobuf throw new InvalidProtocolBufferException($"Value out of range: {value}"); } return (float) value; + case FieldType.Enum: + CheckInteger(value); + var enumValue = field.EnumType.FindValueByNumber((int) value); + if (enumValue == null) + { + throw new InvalidProtocolBufferException($"Invalid enum value: {value} for enum type: {field.EnumType.FullName}"); + } + // Just return it as an int, and let the CLR convert it. + return enumValue.Number; default: throw new InvalidProtocolBufferException($"Unsupported conversion from JSON number for field type {field.FieldType}"); } -- cgit v1.2.3