Skip to content

Commit b547c4b

Browse files
committed
Add enumerations support
1 parent 083a12c commit b547c4b

4 files changed

Lines changed: 63 additions & 0 deletions

File tree

src/System.Text.Json.Protobuf/ProtobufConverter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ private Type GetFieldType(FieldDescriptor fieldDescriptor, Dictionary<string, Ty
143143
return typeof(string);
144144
case FieldType.Message when fieldDescriptor.MessageType.ClrType != null:
145145
return fieldDescriptor.MessageType.ClrType;
146+
case FieldType.Enum:
146147
case FieldType.Message:
147148
return propertyTypeLookup[fieldDescriptor.PropertyName];
148149
default:
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"enumField": 1
3+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using System.Text.Json.Protobuf.Tests.Utils;
2+
using Shouldly;
3+
using SmartAnalyzers.ApprovalTestsExtensions;
4+
using Xunit;
5+
6+
namespace System.Text.Json.Protobuf.Tests;
7+
8+
public class MessageWithEnumFieldTests
9+
{
10+
[Fact]
11+
public void Should_serialize_message_with_enum_field()
12+
{
13+
// Arrange
14+
var msg = new MessageWithEnum
15+
{
16+
EnumField = TestEnum.FirstOption
17+
};
18+
var jsonSerializerOptions = TestHelper.CreateJsonSerializerOptions();
19+
20+
// Act
21+
var serialized = JsonSerializer.Serialize(msg, jsonSerializerOptions);
22+
23+
// Assert
24+
var approver = new ExplicitApprover();
25+
approver.VerifyJson(serialized);
26+
}
27+
28+
[Fact]
29+
public void Should_deserialize_message_with_with_enum_field()
30+
{
31+
// Arrange
32+
var msg = new MessageWithEnum
33+
{
34+
EnumField = TestEnum.FirstOption
35+
};
36+
var jsonSerializerOptions = TestHelper.CreateJsonSerializerOptions();
37+
38+
// Act
39+
var serialized = JsonSerializer.Serialize(msg, jsonSerializerOptions);
40+
var deserialized = JsonSerializer.Deserialize<MessageWithEnum>(serialized, jsonSerializerOptions);
41+
42+
// Assert
43+
deserialized.ShouldNotBeNull();
44+
deserialized.ShouldBeEquivalentTo(msg);
45+
}
46+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
syntax = "proto3";
2+
3+
option csharp_namespace = "System.Text.Json.Protobuf.Tests";
4+
5+
message MessageWithEnum {
6+
TestEnum enum_field = 1;
7+
}
8+
9+
enum TestEnum {
10+
UNKNOWN = 0;
11+
FIRST_OPTION = 1;
12+
SECOND_OPTION = 2;
13+
}

0 commit comments

Comments
 (0)