Skip to content

Commit 33e1337

Browse files
fix(serialization): stack overflow in JsonStringConverter (#61)
1 parent 95fe099 commit 33e1337

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

APIMatic.Core.Test/Utilities/CoreHelperTest.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using APIMatic.Core.Test.MockTypes.Models;
88
using APIMatic.Core.Test.MockTypes.Utilities;
99
using APIMatic.Core.Utilities;
10+
using APIMatic.Core.Utilities.Converters;
1011
using APIMatic.Core.Utilities.Date;
1112
using Newtonsoft.Json.Linq;
1213
using NUnit.Framework;
@@ -107,6 +108,24 @@ public void JsonSerialize_DateTime_RFCFormat()
107108
Assert.AreEqual(expected, actual);
108109
}
109110

111+
[Test]
112+
public void JsonSerialize_JsonString()
113+
{
114+
string str = "a";
115+
string expected = "\"a\"";
116+
var actual = CoreHelper.JsonSerialize(str, new JsonStringConverter());
117+
Assert.That(actual, Is.EquivalentTo(expected));
118+
}
119+
120+
[Test]
121+
public void JsonSerialize_JsonString_NotAString()
122+
{
123+
int number = 24;
124+
string expected = "24";
125+
var actual = CoreHelper.JsonSerialize(number, new JsonStringConverter());
126+
Assert.That(actual, Is.EquivalentTo(expected));
127+
}
128+
110129
#endregion
111130

112131
#region Deserialize

APIMatic.Core/Utilities/Converters/JsonStringConverter.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using Newtonsoft.Json;
3+
using Newtonsoft.Json.Linq;
34

45
namespace APIMatic.Core.Utilities.Converters
56
{
@@ -32,8 +33,17 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
3233
return null;
3334
}
3435

35-
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) =>
36-
serializer.Serialize(writer, value);
36+
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
37+
{
38+
JToken token = JToken.FromObject(value);
39+
40+
if (token.Type == JTokenType.String)
41+
{
42+
JValue val = (JValue)token;
43+
44+
val.WriteTo(writer);
45+
}
46+
}
3747
}
3848

3949
}

0 commit comments

Comments
 (0)