Skip to content

Commit 7d78052

Browse files
committed
Fix scoped IncludeTypeInfo
1 parent 3dc105a commit 7d78052

2 files changed

Lines changed: 51 additions & 24 deletions

File tree

ServiceStack.Text/src/ServiceStack.Text/Common/WriteType.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,9 @@ public static void WriteProperties(TextWriter writer, object instance)
390390
writer.Write(JsWriter.MapStartChar);
391391

392392
var i = 0;
393-
if (WriteTypeInfo != null || JsState.IsWritingDynamic)
393+
var writeTypeInfo = WriteTypeInfo != null || JsState.IsWritingDynamic
394+
|| (JsConfigScope.Current != null && JsConfigScope.Current.IncludeTypeInfo && !JsConfigScope.Current.ExcludeTypeInfo);
395+
if (writeTypeInfo)
394396
{
395397
if (JsConfig.PreferInterfaces && TryWriteSelfType(writer)) i++;
396398
else if (TryWriteTypeInfo(writer, instance)) i++;
Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,60 @@
1-
using NUnit.Framework;
1+
using System;
2+
using NUnit.Framework;
23

3-
namespace ServiceStack.Text.Tests
4+
namespace ServiceStack.Text.Tests;
5+
6+
[TestFixture]
7+
public class DynamicJsonTests
48
{
5-
[TestFixture]
6-
public class DynamicJsonTests
9+
[Test]
10+
public void Can_Serialize_dynamic_collection()
711
{
8-
[Test]
9-
public void Can_Serialize_dynamic_collection()
10-
{
11-
dynamic rows = new[] { new { Name = "Foo" }, new { Name = "Bar" } };
12+
dynamic rows = new[] { new { Name = "Foo" }, new { Name = "Bar" } };
1213

13-
string json = JsonSerializer.SerializeToString(rows);
14+
string json = JsonSerializer.SerializeToString(rows);
1415

15-
Assert.That(json, Is.EqualTo("[{\"Name\":\"Foo\"},{\"Name\":\"Bar\"}]"));
16+
Assert.That(json, Is.EqualTo("[{\"Name\":\"Foo\"},{\"Name\":\"Bar\"}]"));
1617

17-
string csv = CsvSerializer.SerializeToString(rows);
18-
Assert.That(csv.NormalizeNewLines(), Is.EqualTo("Name\nFoo\nBar"));
19-
}
18+
string csv = CsvSerializer.SerializeToString(rows);
19+
Assert.That(csv.NormalizeNewLines(), Is.EqualTo("Name\nFoo\nBar"));
20+
}
2021

21-
[Test]
22-
public void Can_deserialize_dynamic_instance()
23-
{
24-
var dog = new { Name = "Spot" };
25-
var json = DynamicJson.Serialize(dog);
22+
[Test]
23+
public void Can_deserialize_dynamic_instance()
24+
{
25+
var dog = new { Name = "Spot" };
26+
var json = DynamicJson.Serialize(dog);
2627

27-
Assert.That(json, Is.EqualTo("{\"Name\":\"Spot\"}"));
28+
Assert.That(json, Is.EqualTo("{\"Name\":\"Spot\"}"));
2829

29-
var deserialized = DynamicJson.Deserialize(json);
30+
var deserialized = DynamicJson.Deserialize(json);
3031

31-
Assert.IsNotNull(deserialized);
32-
Assert.That(deserialized.Name, Is.EqualTo(dog.Name));
32+
Assert.IsNotNull(deserialized);
33+
Assert.That(deserialized.Name, Is.EqualTo(dog.Name));
34+
}
35+
36+
public class Customer
37+
{
38+
public string Name { get; set; }
39+
}
40+
41+
[Test]
42+
public void Can_IncludeTypeInfo_within_JsConfigScope()
43+
{
44+
JsConfig.IncludeTypeInfo = false;
45+
46+
var cus = new Customer { Name = "Foo" };
47+
48+
Assert.That(JsonSerializer.SerializeToString(cus), Does.Not.Contain("__type"));
49+
50+
using (JsConfig.With(new Config { IncludeTypeInfo = true }))
51+
{
52+
Assert.That(JsonSerializer.SerializeToString(cus), Does.Contain("__type"));
3353
}
54+
55+
Assert.That(JsonSerializer.SerializeToString(cus), Does.Not.Contain("__type"));
56+
57+
JsConfig.Reset();
3458
}
35-
}
59+
60+
}

0 commit comments

Comments
 (0)