Skip to content

Commit 92c729f

Browse files
1728 - Enhance/Fix ByteArrayConverter to support base64 deserialization of byte[] (#1736)
1 parent 3de6e26 commit 92c729f

File tree

3 files changed

+40
-1
lines changed

3 files changed

+40
-1
lines changed

Libraries/src/Amazon.Lambda.Serialization.SystemTextJson/Amazon.Lambda.Serialization.SystemTextJson.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<AssemblyName>Amazon.Lambda.Serialization.SystemTextJson</AssemblyName>
1010
<PackageId>Amazon.Lambda.Serialization.SystemTextJson</PackageId>
1111
<PackageTags>AWS;Amazon;Lambda</PackageTags>
12-
<VersionPrefix>2.4.2</VersionPrefix>
12+
<VersionPrefix>2.4.3</VersionPrefix>
1313
<PackageReadmeFile>README.md</PackageReadmeFile>
1414
</PropertyGroup>
1515
<ItemGroup>

Libraries/src/Amazon.Lambda.Serialization.SystemTextJson/Converters/ByteArrayConverter.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ public override byte[] Read(ref Utf8JsonReader reader, Type typeToConvert, JsonS
1818
return null;
1919
}
2020

21+
if (reader.TokenType == JsonTokenType.String)
22+
{
23+
return reader.GetBytesFromBase64();
24+
}
25+
2126
var byteList = new List<byte>();
2227

2328
while (reader.Read())
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using Amazon.Lambda.Serialization.SystemTextJson;
2+
using System.IO;
3+
using System.Text;
4+
using Xunit;
5+
6+
namespace Amazon.Lambda.AspNetCoreServer.Test;
7+
8+
public class DefaultLambdaJsonSerializerTests
9+
{
10+
private const string SampleValue = "Hello World!";
11+
12+
[Fact]
13+
public void CanDeserializeIntArrayEncodedString() =>
14+
RunTest("{\"Value\":[72,101,108,108,111,32,87,111,114,108,100,33]}");
15+
16+
[Fact]
17+
public void CanDeserializeBase64EncodedString() =>
18+
RunTest("{\"Value\":\"SGVsbG8gV29ybGQh\"}");
19+
20+
private void RunTest(string jsonPayload)
21+
{
22+
using var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonPayload));
23+
24+
var defaultLambdaJsonSerializer = new DefaultLambdaJsonSerializer();
25+
var inputFromMemoryStream = defaultLambdaJsonSerializer.Deserialize<ClassWithByteArrayProperty>(ms);
26+
27+
Assert.Equal(SampleValue, Encoding.UTF8.GetString(inputFromMemoryStream.Value));
28+
}
29+
30+
private class ClassWithByteArrayProperty
31+
{
32+
public byte[] Value { get; set; }
33+
}
34+
}

0 commit comments

Comments
 (0)