diff options
author | Jon Skeet <skeet@pobox.com> | 2015-08-03 17:32:28 +0100 |
---|---|---|
committer | Jon Skeet <skeet@pobox.com> | 2015-08-03 17:32:28 +0100 |
commit | b59bfcb30918382b3787db57d8caa803678f1ac5 (patch) | |
tree | f8aa810aed4918ac1fdd327a6a90f84408caaaf6 /csharp/src/Google.Protobuf/JsonFormatter.cs | |
parent | 8136ad5c3c93d4dc922fafc3672eb19e4e58d3cf (diff) | |
parent | 0e30de3d6b99f79efc9ddafa9e60916a54524353 (diff) | |
download | protobuf-b59bfcb30918382b3787db57d8caa803678f1ac5.tar.gz protobuf-b59bfcb30918382b3787db57d8caa803678f1ac5.tar.bz2 protobuf-b59bfcb30918382b3787db57d8caa803678f1ac5.zip |
Merge pull request #681 from jskeet/json-fieldmask
JSON formatting for FieldMask
Diffstat (limited to 'csharp/src/Google.Protobuf/JsonFormatter.cs')
-rw-r--r-- | csharp/src/Google.Protobuf/JsonFormatter.cs | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/csharp/src/Google.Protobuf/JsonFormatter.cs b/csharp/src/Google.Protobuf/JsonFormatter.cs index 3b25beb6..999e106c 100644 --- a/csharp/src/Google.Protobuf/JsonFormatter.cs +++ b/csharp/src/Google.Protobuf/JsonFormatter.cs @@ -36,6 +36,7 @@ using System.Globalization; using System.Text; using Google.Protobuf.Reflection; using Google.Protobuf.WellKnownTypes; +using System.Linq; namespace Google.Protobuf { @@ -402,6 +403,11 @@ namespace Google.Protobuf MaybeWrapInString(builder, value, WriteDuration, inField); return; } + if (descriptor.FullName == FieldMask.Descriptor.FullName) + { + MaybeWrapInString(builder, value, WriteFieldMask, inField); + return; + } if (descriptor.FullName == Struct.Descriptor.FullName) { WriteStruct(builder, (IMessage) value); @@ -479,6 +485,12 @@ namespace Google.Protobuf builder.Append('s'); } + private void WriteFieldMask(StringBuilder builder, IMessage value) + { + IList paths = (IList) value.Descriptor.Fields[FieldMask.PathsFieldNumber].Accessor.GetValue(value); + AppendEscapedString(builder, string.Join(",", paths.Cast<string>().Select(ToCamelCase))); + } + /// <summary> /// Appends a number of nanoseconds to a StringBuilder. Either 0 digits are added (in which /// case no "." is appended), or 3 6 or 9 digits. @@ -654,6 +666,15 @@ namespace Google.Protobuf private void WriteString(StringBuilder builder, string text) { builder.Append('"'); + AppendEscapedString(builder, text); + builder.Append('"'); + } + + /// <summary> + /// Appends the given text to the string builder, escaping as required. + /// </summary> + private void AppendEscapedString(StringBuilder builder, string text) + { for (int i = 0; i < text.Length; i++) { char c = text[i]; @@ -713,7 +734,6 @@ namespace Google.Protobuf break; } } - builder.Append('"'); } private const string Hex = "0123456789abcdef"; |