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

Commit 2195662

Browse files
committed
Merge pull request #339 from tstade/StringEnumsDoubleEscaped
Fix for Issue #335 (double quotes for string enums to json)
2 parents 7c64059 + 80f5368 commit 2195662

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

src/ServiceStack.Text/Json/JsonTypeSerializer.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -288,10 +288,10 @@ public void WriteDecimal(TextWriter writer, object decimalValue)
288288
public void WriteEnum(TextWriter writer, object enumValue)
289289
{
290290
if (enumValue == null) return;
291-
if (JsConfig.TreatEnumAsInteger)
292-
JsWriter.WriteEnumFlags(writer, enumValue);
293-
else
294-
WriteRawString(writer, enumValue.ToString());
291+
if (JsConfig.TreatEnumAsInteger)
292+
JsWriter.WriteEnumFlags(writer, enumValue);
293+
else
294+
writer.Write(enumValue);
295295
}
296296

297297
public void WriteEnumFlags(TextWriter writer, object enumFlagValue)

tests/ServiceStack.Text.Tests/AdhocModelTests.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,37 @@ public void Can_Serialize_Array_of_enums()
526526
Assert.That(json, Is.EqualTo("[\"Enum1\",\"Enum2\",\"Enum3\"]"));
527527
}
528528

529+
public class DictionaryEnumType
530+
{
531+
public Dictionary<EnumValues, Test> DictEnumType { get; set; }
532+
}
533+
534+
[Test]
535+
public void Can_Serialize_Dictionary_With_Enums()
536+
{
537+
538+
Dictionary<EnumValues, Test> dictEnumType =
539+
new Dictionary<EnumValues, Test>
540+
{
541+
{
542+
EnumValues.Enum1, new Test { Val = "A Value" }
543+
}
544+
};
545+
546+
var item = new DictionaryEnumType
547+
{
548+
DictEnumType = dictEnumType
549+
};
550+
const string expected = "{\"DictEnumType\":{\"Enum1\":{\"Val\":\"A Value\"}}}";
551+
552+
var jsonItem = JsonSerializer.SerializeToString(item);
553+
//Log(jsonItem);
554+
Assert.That(jsonItem, Is.EqualTo(expected));
555+
556+
var deserializedItem = JsonSerializer.DeserializeFromString<DictionaryEnumType>(jsonItem);
557+
Assert.That(deserializedItem, Is.TypeOf<DictionaryEnumType>());
558+
}
559+
529560
[Test]
530561
public void Can_Serialize_Array_of_chars()
531562
{

0 commit comments

Comments
 (0)