Skip to content

Commit c8371a0

Browse files
Kristoffer Lerbæk PedersenHavret
authored andcommitted
Add ByteString converter
1 parent d808c32 commit c8371a0

2 files changed

Lines changed: 31 additions & 0 deletions

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System.Text.Json;
2+
using Google.Protobuf;
3+
using Google.Protobuf.Reflection;
4+
using Protobuf.System.Text.Json.InternalConverters;
5+
6+
internal class ByteStringConverter : InternalConverter
7+
{
8+
public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
9+
{
10+
var base64String = ((ByteString)value).ToBase64();
11+
writer.WriteStringValue(base64String);
12+
}
13+
14+
public override void Read(ref Utf8JsonReader reader, IMessage obj, Type typeToConvert, JsonSerializerOptions options,
15+
IFieldAccessor fieldAccessor)
16+
{
17+
var base64String = reader.GetString();
18+
if (base64String is null)
19+
{
20+
return;
21+
}
22+
var value = ByteString.FromBase64(base64String);
23+
fieldAccessor.SetValue(obj, value);
24+
}
25+
}

src/Protobuf.System.Text.Json/InternalConverters/InternalConverterFactory.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Text.Json;
2+
using Google.Protobuf;
23

34
namespace Protobuf.System.Text.Json.InternalConverters;
45

@@ -23,6 +24,11 @@ public static InternalConverter Create(FieldInfo fieldInfo, JsonSerializerOption
2324
var internalConverter = (InternalConverter) Activator.CreateInstance(typeof(ProtoEnumConverter), args: new object[] { fieldInfo.EnumType, jsonSerializerOptions.Encoder! })!;
2425
return internalConverter;
2526
}
27+
else if (fieldInfo.FieldType == typeof(ByteString))
28+
{
29+
var internalConverter = new ByteStringConverter();
30+
return internalConverter;
31+
}
2632
else
2733
{
2834
var converterType = typeof(FieldConverter<>).MakeGenericType(fieldInfo.FieldType);

0 commit comments

Comments
 (0)