aboutsummaryrefslogtreecommitdiff
path: root/csharp/src/Google.Protobuf/MessageParser.cs
diff options
context:
space:
mode:
authorJon Skeet <jonskeet@google.com>2015-09-04 12:41:14 +0100
committerJon Skeet <jonskeet@google.com>2015-11-03 19:05:11 +0000
commitfb2488225fbd239f7880e3b493cbfd2f19da755b (patch)
treee51173d483b91a77708dd3bdbffa1577bf89bbec /csharp/src/Google.Protobuf/MessageParser.cs
parentaa3675415ec8da317793a3e151e44daaebc21ff8 (diff)
downloadprotobuf-fb2488225fbd239f7880e3b493cbfd2f19da755b.tar.gz
protobuf-fb2488225fbd239f7880e3b493cbfd2f19da755b.tar.bz2
protobuf-fb2488225fbd239f7880e3b493cbfd2f19da755b.zip
Implement JSON parsing in C#.
This includes all the well-known types except Any. Some aspects are likely to require further work when the details of the JSON parsing expectations are hammered out in more detail. Some of these have "ignored" tests already. Note that the choice *not* to use Json.NET was made for two reasons: - Going from 0 dependencies to 1 dependency is a big hit, and there's not much benefit here - Json.NET parses more leniently than we'd want; accommodating that would be nearly as much work as writing the tokenizer This only really affects the JsonTokenizer, which could be replaced by Json.NET. The JsonParser code would be about the same length with Json.NET... but I wouldn't be as confident in it.
Diffstat (limited to 'csharp/src/Google.Protobuf/MessageParser.cs')
-rw-r--r--csharp/src/Google.Protobuf/MessageParser.cs12
1 files changed, 12 insertions, 0 deletions
diff --git a/csharp/src/Google.Protobuf/MessageParser.cs b/csharp/src/Google.Protobuf/MessageParser.cs
index 6a6f1017..70c52ba6 100644
--- a/csharp/src/Google.Protobuf/MessageParser.cs
+++ b/csharp/src/Google.Protobuf/MessageParser.cs
@@ -142,5 +142,17 @@ namespace Google.Protobuf
message.MergeFrom(input);
return message;
}
+
+ /// <summary>
+ /// Parses a message from the given JSON.
+ /// </summary>
+ /// <param name="json">The JSON to parse.</param>
+ /// <returns>The parsed message.</returns>
+ public T ParseJson(string json)
+ {
+ T message = factory();
+ JsonParser.Default.Merge(message, json);
+ return message;
+ }
}
}