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

Commit e151efe

Browse files
committed
Allow overriding of serialization of Guid formats
1 parent 3f8660e commit e151efe

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

src/ServiceStack.Text/Json/JsonTypeSerializer.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,13 +168,17 @@ public void WriteNullableTimeSpan(TextWriter writer, object oTimeSpan)
168168

169169
public void WriteGuid(TextWriter writer, object oValue)
170170
{
171-
WriteRawString(writer, ((Guid)oValue).ToString("N"));
171+
WriteRawString(writer, JsConfig<Guid>.RawSerializeFn != null
172+
? JsConfig<Guid>.RawSerializeFn((Guid) oValue)
173+
: ((Guid) oValue).ToString("N"));
172174
}
173175

174176
public void WriteNullableGuid(TextWriter writer, object oValue)
175177
{
176178
if (oValue == null) return;
177-
WriteRawString(writer, ((Guid)oValue).ToString("N"));
179+
WriteRawString(writer, JsConfig<Guid>.RawSerializeFn != null
180+
? JsConfig<Guid>.RawSerializeFn((Guid)oValue)
181+
: ((Guid)oValue).ToString("N"));
178182
}
179183

180184
public void WriteBytes(TextWriter writer, object oByteValue)

src/ServiceStack.Text/Jsv/JsvTypeSerializer.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,14 +144,18 @@ public void WriteNullableTimeSpan(TextWriter writer, object oTimeSpan)
144144

145145
public void WriteGuid(TextWriter writer, object oValue)
146146
{
147-
writer.Write(((Guid)oValue).ToString("N"));
147+
writer.Write(JsConfig<Guid>.RawSerializeFn != null
148+
? JsConfig<Guid>.RawSerializeFn((Guid) oValue)
149+
: ((Guid) oValue).ToString("N"));
148150
}
149151

150-
public void WriteNullableGuid(TextWriter writer, object oValue)
152+
public void WriteNullableGuid(TextWriter writer, object oValue)
151153
{
152154
if (oValue == null) return;
153-
writer.Write(((Guid)oValue).ToString("N"));
154-
}
155+
writer.Write(JsConfig<Guid>.RawSerializeFn != null
156+
? JsConfig<Guid>.RawSerializeFn((Guid)oValue)
157+
: ((Guid)oValue).ToString("N"));
158+
}
155159

156160
public void WriteBytes(TextWriter writer, object oByteValue)
157161
{

tests/ServiceStack.Text.Tests/JsonTests/CustomRawSerializerTests.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,20 @@ public void Reset_ShouldClear_JsConfigT_CachedFunctions()
7272
json = JsonSerializer.SerializeToString(test);
7373
// Assert:
7474
Assert.That(json, Is.EquivalentTo("{\"Name\":\"Test\",\"Data\":\"AQIDBAU=\"}"));
75-
}
75+
}
76+
77+
[Test]
78+
public void Can_override_Guid_serialization_format()
79+
{
80+
var guid = new Guid("ADFA988B-01F6-490D-B65B-63750F869496");
81+
82+
Assert.That(guid.ToJson().Trim('"'), Is.EqualTo("adfa988b01f6490db65b63750f869496"));
83+
Assert.That(guid.ToJsv(), Is.EqualTo("adfa988b01f6490db65b63750f869496"));
84+
85+
JsConfig<Guid>.RawSerializeFn = x => x.ToString();
86+
87+
Assert.That(guid.ToJson().Trim('"'), Is.EqualTo("adfa988b-01f6-490d-b65b-63750f869496"));
88+
Assert.That(guid.ToJsv(), Is.EqualTo("adfa988b-01f6-490d-b65b-63750f869496"));
89+
}
7690
}
7791
}

0 commit comments

Comments
 (0)