Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 678dc00

Browse files
committed
Ensure all built-in numeric types are written out as number literals
1 parent 601da57 commit 678dc00

File tree

5 files changed

+38
-0
lines changed

5 files changed

+38
-0
lines changed

src/ServiceStack.Text/Common/ITypeSerializer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public interface ITypeSerializer
3333
void WriteBytes(TextWriter writer, object oByteValue);
3434
void WriteChar(TextWriter writer, object charValue);
3535
void WriteByte(TextWriter writer, object byteValue);
36+
void WriteSByte(TextWriter writer, object sbyteValue);
3637
void WriteInt16(TextWriter writer, object intValue);
3738
void WriteUInt16(TextWriter writer, object intValue);
3839
void WriteInt32(TextWriter writer, object intValue);

src/ServiceStack.Text/Common/JsWriter.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ public WriteObjectDelegate GetValueTypeToStringMethod(Type type)
193193

194194
if (typeCode == TypeCode.Byte)
195195
return Serializer.WriteByte;
196+
if (typeCode == TypeCode.SByte)
197+
return Serializer.WriteSByte;
196198

197199
if (typeCode == TypeCode.Int16)
198200
return Serializer.WriteInt16;

src/ServiceStack.Text/Json/JsonTypeSerializer.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,14 @@ public void WriteByte(TextWriter writer, object byteValue)
204204
writer.Write((byte)byteValue);
205205
}
206206

207+
public void WriteSByte(TextWriter writer, object sbyteValue)
208+
{
209+
if (sbyteValue == null)
210+
writer.Write(JsonUtils.Null);
211+
else
212+
writer.Write((sbyte)sbyteValue);
213+
}
214+
207215
public void WriteInt16(TextWriter writer, object intValue)
208216
{
209217
if (intValue == null)

src/ServiceStack.Text/Jsv/JsvTypeSerializer.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,12 @@ public void WriteByte(TextWriter writer, object byteValue)
176176
writer.Write((byte)byteValue);
177177
}
178178

179+
public void WriteSByte(TextWriter writer, object sbyteValue)
180+
{
181+
if (sbyteValue == null) return;
182+
writer.Write((sbyte)sbyteValue);
183+
}
184+
179185
public void WriteInt16(TextWriter writer, object intValue)
180186
{
181187
if (intValue == null) return;

tests/ServiceStack.Text.Tests/DynamicObjectTests.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,5 +318,26 @@ public void Does_deserialize_int_objects()
318318

319319
JsConfig.Reset();
320320
}
321+
322+
string SerializeObject(object value)
323+
{
324+
return new TypeWithObjects { Value = value }.ToJson();
325+
}
326+
327+
[Test]
328+
public void Does_serialize_number_object_types()
329+
{
330+
Assert.That(SerializeObject((byte)1), Is.EqualTo("{\"Value\":1}"));
331+
Assert.That(SerializeObject((sbyte)1), Is.EqualTo("{\"Value\":1}"));
332+
Assert.That(SerializeObject((short)1), Is.EqualTo("{\"Value\":1}"));
333+
Assert.That(SerializeObject((ushort)1), Is.EqualTo("{\"Value\":1}"));
334+
Assert.That(SerializeObject((int)1), Is.EqualTo("{\"Value\":1}"));
335+
Assert.That(SerializeObject((uint)1), Is.EqualTo("{\"Value\":1}"));
336+
Assert.That(SerializeObject((long)1), Is.EqualTo("{\"Value\":1}"));
337+
Assert.That(SerializeObject((ulong)1), Is.EqualTo("{\"Value\":1}"));
338+
Assert.That(SerializeObject((float)1.1), Is.EqualTo("{\"Value\":1.1}"));
339+
Assert.That(SerializeObject((double)1.1), Is.EqualTo("{\"Value\":1.1}"));
340+
Assert.That(SerializeObject((decimal)1.1), Is.EqualTo("{\"Value\":1.1}"));
341+
}
321342
}
322343
}

0 commit comments

Comments
 (0)