aboutsummaryrefslogtreecommitdiffhomepage
path: root/csharp/src/Google.Protobuf/JsonFormatter.cs
Commit message (Collapse)AuthorAge
* Remove the executable bit from several source code filesGravatar Sebastian Schuberth2018-06-25
| | | | This potentially avoids compiler warnings.
* Add FormatEnumAsInt support for Json Format. And scale ↵Gravatar Jie Luo2017-03-24
| | | | JsonFormatter.Settings to multiple options.
* There might be duplicated enum values when allow_alias is true. Add ↵Gravatar Jie Luo2017-02-28
| | | | PreferredAlias into OriginalNameAttribute to remove the duplication (#2727)
* Fixes for .NET 3.5 compatibilityGravatar John Brock2017-02-23
| | | | | * Changing DOTNET35 framework symbols in preprocessor directives to the default built-in value of NET35. * Adding extension method StreamExtension.CopyTo for .NET 3.5 because it didn’t exist until .NET 4, and adding associated unit tests.
* Change JSON field name formattingGravatar Jon Skeet2016-11-03
| | | | | | | | | This affects cases with leading capital letters. This breaks compatibility with previous C# releases, but fixes compatibility with other implementations. See #2278 for details.
* Bring C#'s ToPascalCase method in line with C++.Gravatar Jon Skeet2016-07-27
| | | | | (This still doesn't fix the conformance tests, but at least we're now consistent with the C++ code.)
* Adding conditional compiler symbol to support .NET 3.5 (#1713)Gravatar detlevschwabe2016-06-28
| | | | * Adding condition compiler symbol to support .NET 3.5
* Expose JsonFormatter.WriteValue.Gravatar Jon Skeet2016-06-23
| | | | | This isn't useful to most users, but can be handy in advanced use cases, as requested in #1465.
* Allow custom type URL prefixes in Any.PackGravatar Jon Skeet2016-04-29
| | | | | | (And likewise ignore the prefix in unpack.) Fixes issue #1459.
* Use the original name in JSON formatting.Gravatar Jon Skeet2016-04-20
| | | | (JSON parsing already does the right thing.)
* Code review fixesGravatar alien2016-03-29
|
* csharp: add support for the json_name optionGravatar alien2016-03-18
| | | | | Conflicts: csharp/src/Google.Protobuf/JsonFormatter.cs
* Replace StringBuilder with TextWriter in JsonFormatterGravatar avgweb2016-03-06
|
* Rename Preconditions to ProtoPreconditionsGravatar Jon Skeet2016-02-04
| | | | (Generated code changes in next commit.)
* Ensure that FieldMask, Timestamp and Duration ToString() calls don't throwGravatar Jon Skeet2016-01-20
| | | | | | | | | | | | | The usage of ICustomDiagnosticMessage here is non-essential - ToDiagnosticString doesn't actually get called by ToString() in this case, due to JsonFormatter code. It was intended to make it clearer that it *did* have a custom format... but then arguably I should do the same for Value, Struct, Any etc. Moving some of the code out of JsonFormatter and into Duration/Timestamp/FieldMask likewise feels somewhat nice, somewhat nasty... basically there are JSON-specific bits of formatting, but also domain-specific bits of computation. <sigh> Thoughts welcome.
* Merge pull request #1096 from jskeet/custom-to-stringGravatar Jan Tattermusch2016-01-19
|\ | | | | Introduce ICustomDiagnosticMessage to allow for custom string formatting
* | Change handling of unknown enums: we now write out the value as a number.Gravatar Jon Skeet2016-01-15
| |
* | Extra strictness for FieldMask conversionGravatar Jon Skeet2016-01-15
| |
* | Fixes to JSON timestamp/duration representationsGravatar Jon Skeet2016-01-15
| |
| * Introduce ICustomDiagnosticMessage to allow for custom string formattingGravatar Jon Skeet2016-01-13
|/ | | | This fixes issue #933, effectively.
* Ensure all formatted well-known-type values are valid JSONGravatar Jon Skeet2016-01-06
| | | | | | | This involves quoting timestamp/duration/field-mask values, even when they're not in fields. It's better for consistency. Fixes issue #1097.
* Make ToString() valid without a type registryGravatar Jon Skeet2015-12-15
| | | | | | | | | | | | | | | This addresses issue #1008, by creating a JsonFormatter which is private and only different to JsonFormatter.Default in terms of reference equality. Other plausible designs: - The same, but expose the diagnostic-only formatter - Add something to settings to say "I don't have a type registry at all" - Change the behaviour of JsonFormatter.Default (bad idea IMO, as we really *don't* want the result of this used as regular JSON to be parsed) Note that just trying to find a separate fix to issue #933 and using that to override Any.ToString() differently wouldn't work for messages that *contain* an Any. Generated code changes follow in the next commit.
* Handle JSON parsing for Any.Gravatar Jon Skeet2015-12-02
| | | | This required a rework of the tokenizer to allow for a "replaying" tokenizer, basically in case the @type value comes after the data itself. This rework is nice in some ways (all the pushback and object depth logic in one place) but is a little fragile in terms of token push-back when using the replay tokenizer. It'll be fine for the scenario we need it for, but we should be careful...
* JSON formatting for Any.Gravatar Jon Skeet2015-12-02
|
* Tidy up reflection in advance of attempting to implement DynamicMessage.Gravatar Jon Skeet2015-11-22
| | | | | | | | | There are corner cases where MessageDescriptor.{ClrType,Parser} will return null, and these are now documented. However, normally they *should* be implemented, even for descriptors of for dynamic messages. Ditto FieldDescriptor.Accessor. We'll still need a fair amount of work to implement dynamic messages, but this change means that the public API will be remain intact. Additionally, this change starts making use of C# 6 features in the files that it touches. This is far from exhaustive, and later PRs will have more. Generated code changes coming in the next commit.
* Generated code changes and manual changes for previous commit.Gravatar Jon Skeet2015-11-09
|
* Implement JSON parsing in C#.Gravatar Jon Skeet2015-11-03
| | | | | | | | | | 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.
* Support ToString in RepeatedField and MapField.Gravatar Jon Skeet2015-10-01
| | | | | | 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.
* Tidying up - fix a bunch of TODOs and remove outdated ones.Gravatar Jon Skeet2015-08-08
|
* Merge pull request #691 from jskeet/xml-documentationGravatar Jon Skeet2015-08-05
|\ | | | | Document everything, and turn on errors if we fail to document anything in the future
| * Document everything, and turn on errors if we fail to document anything in ↵Gravatar Jon Skeet2015-08-04
| | | | | | | | the future.
* | Fix build warnings around unused variablesGravatar Jon Skeet2015-08-04
|/
* JSON formatting for FieldMaskGravatar Jon Skeet2015-08-03
|
* Initial pass at formatting Struct as JSON.Gravatar Jon Skeet2015-08-03
| | | | This seems remarkably little code, but it appears to work. I can add tests for invalid structs at some point, once the general approach is approved.
* Addressed issues raised in code review. Will merge when green.Gravatar Jon Skeet2015-08-03
|
* Format JSON for Duration and Timestamp.Gravatar Jon Skeet2015-08-03
| | | | This is taking an approach of putting all the logic in JsonFormatter. That's helpful in terms of concealing the details of whether or not to wrap the value in quotes, but it does lack flexibility. I don't *think* we want to allow user-defined formatting of messages, so that much shouldn't be a problem.
* Fix JSON formatting to always emit fields in field order, including oneofsGravatar Jon Skeet2015-07-31
|
* Rename ThrowHelper to Preconditions and make it public - we'll want to use ↵Gravatar Jon Skeet2015-07-30
| | | | | | | it from the generated code soon. Additionally, change it to return the value passed, and make it generic with a class constraint. A separate method doesn't have the class constraint, for more unusual scenarios.
* Implemented Jan's suggestion of FieldCollection, replacing ↵Gravatar Jon Skeet2015-07-22
| | | | | | | | | | FieldAccessorCollection. I think Jan was actually suggesting keeping both, but that feels redundant to me. The test diff is misleading here IMO, because I wouldn't expect real code using reflection to use several accessors one after another like this, unless it was within a loop. Evidence to the contrary would be welcome :) This change also incidentally goes part way to fixing the issue of the JSON formatter not writing out the fields in field number order - with this change, it does except for oneofs, which we can fix in a follow-up change. I haven't actually added a test with a message with fields deliberately out of order - I'm happy to do so though. It feels like it would make sense to be in google/src/protobuf, but it's not entirely clear what the rules of engagement are for adding new messages there. (unittest_proto3.proto?)
* Revamp to reflection.Gravatar Jon Skeet2015-07-21
| | | | | | | | | | | | | | | | | Changes in brief: 1. Descriptor is now the entry point for all reflection. 2. IReflectedMessage has gone; there's now a Descriptor property in IMessage, which is explicitly implemented (due to the static property). 3. FieldAccessorTable has gone away 4. IFieldAccessor and OneofFieldAccessor still exist; we *could* put the functionality straight into FieldDescriptor and OneofDescriptor... I'm unsure about that. 5. There's a temporary property MessageDescriptor.FieldAccessorsByFieldNumber to make the test changes small - we probably want this to go away 6. Discovery for delegates is now via attributes applied to properties and the Clear method of a oneof I'm happy with 1-3. 4 I'm unsure about - feedback welcome. 5 will go away 6 I'm unsure about, both in design and implementation. Should we have a ProtobufMessageAttribute too? Should we find all the relevant attributes in MessageDescriptor and pass them down, to avoid an O(N^2) scenario? Generated code changes coming in the next commit.
* First part of JSON formatting for well-known types. I think we need a ↵Gravatar Jon Skeet2015-07-20
| | | | reflection API rethink before doing the rest.
* First pass at the big rename from ProtocolBuffers to Google.Protobuf.Gravatar Jon Skeet2015-07-17
We'll see what I've missed when CI fails...