From 9ed6d4da3710daae65cdc60719ebff79a472b648 Mon Sep 17 00:00:00 2001 From: Jon Skeet Date: Mon, 28 Sep 2015 17:28:02 +0100 Subject: Support ToString in RepeatedField and MapField. This changes how we approach JSON formatting in general - instead of looking at the field a value came from, we just look at the type of the value. It's possible this *could* be slightly inefficient, but if we start caring about JSON performance deeply, we'll probably want to rewrite all of this anyway. It's definitely simpler this way. When we support dynamic messages, we'll need to modify JsonFormatter to handle enum values, as they won't come be "real" .NET enums at that point. It shouldn't be hard to do though. --- csharp/src/Google.Protobuf/Collections/MapField.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'csharp/src/Google.Protobuf/Collections/MapField.cs') diff --git a/csharp/src/Google.Protobuf/Collections/MapField.cs b/csharp/src/Google.Protobuf/Collections/MapField.cs index 0fa63bef..c0ed28ae 100644 --- a/csharp/src/Google.Protobuf/Collections/MapField.cs +++ b/csharp/src/Google.Protobuf/Collections/MapField.cs @@ -35,6 +35,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Text; using Google.Protobuf.Compatibility; namespace Google.Protobuf.Collections @@ -45,10 +46,17 @@ namespace Google.Protobuf.Collections /// Key type in the map. Must be a type supported by Protocol Buffer map keys. /// Value type in the map. Must be a type supported by Protocol Buffers. /// + /// /// This implementation preserves insertion order for simplicity of testing /// code using maps fields. Overwriting an existing entry does not change the /// position of that entry within the map. Equality is not order-sensitive. /// For string keys, the equality comparison is provided by . + /// + /// + /// This implementation does not generally prohibit the use of key/value types which are not + /// supported by Protocol Buffers (e.g. using a key type of byte) but nor does it guarantee + /// that all operations will work in such cases. + /// /// public sealed class MapField : IDeepCloneable>, IDictionary, IEquatable>, IDictionary { @@ -482,6 +490,17 @@ namespace Google.Protobuf.Collections return size; } + /// + /// Returns a string representation of this repeated field, in the same + /// way as it would be represented by the default JSON formatter. + /// + public override string ToString() + { + var builder = new StringBuilder(); + JsonFormatter.Default.WriteDictionary(builder, this); + return builder.ToString(); + } + #region IDictionary explicit interface implementation void IDictionary.Add(object key, object value) { -- cgit v1.2.3