Skip to content

Commit 383f42d

Browse files
authored
Merge pull request #149 from manuc66/feature/discriminator_first_by_default
Should fix Place the Discriminator property First by default
2 parents a428c65 + 4c695bc commit 383f42d

File tree

3 files changed

+41
-20
lines changed

3 files changed

+41
-20
lines changed

JsonSubTypes.Tests/DiscriminatorLocationTests.cs

+26-4
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ public void CheckFirst()
4848

4949
Assert.AreEqual(json_first, result);
5050
}
51-
51+
5252
[Test]
53-
public void CheckDefaultLast()
53+
public void CheckFirstByDefault()
5454
{
5555
var settings = new JsonSerializerSettings();
5656
JsonConvert.DefaultSettings = () => settings;
@@ -66,13 +66,35 @@ public void CheckDefaultLast()
6666
SimpleBase test_object = new SimpleChildA() { Name = "bob", Age = 12 };
6767

6868

69-
var json_first = "{\"Age\":12,\"Name\":\"bob\",\"type\":\"TypeA\"}";
69+
var json_first = "{\"type\":\"TypeA\",\"Age\":12,\"Name\":\"bob\"}";
7070

7171
var result = JsonConvert.SerializeObject(test_object);
72-
72+
7373
Assert.AreEqual(json_first, result);
7474
}
7575

76+
[Test]
77+
public void CheckDefaultNotFirst()
78+
{
79+
var settings = new JsonSerializerSettings();
80+
JsonConvert.DefaultSettings = () => settings;
81+
82+
settings.Converters.Add(JsonSubtypesConverterBuilder
83+
.Of(typeof(SimpleBase), "type")
84+
.SerializeDiscriminatorProperty(false)
85+
.RegisterSubtype(typeof(SimpleChildA), "TypeA")
86+
.RegisterSubtype(typeof(SimpleChildB), "TypeB")
87+
.Build());
88+
89+
90+
SimpleBase test_object = new SimpleChildA() { Name = "bob", Age = 12 };
91+
92+
93+
var result = JsonConvert.SerializeObject(test_object);
94+
95+
Assert.AreEqual("{\"Age\":12,\"Name\":\"bob\",\"type\":\"TypeA\"}", result);
96+
}
97+
7698
[Test]
7799
public void CheckExplicitLast()
78100
{

JsonSubTypes.Tests/DynamicRegisterTests.cs

+13-14
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public void SerializeTest()
124124
.RegisterSubtype(typeof(Dog), AnimalType.Dog)
125125
.Build());
126126

127-
var json = "{\"catLives\":6,\"age\":11,\"type\":2}";
127+
var json = "{\"type\":2,\"catLives\":6,\"age\":11}";
128128

129129
var result = JsonConvert.SerializeObject(new Cat { Age = 11, Lives = 6 });
130130

@@ -144,7 +144,7 @@ public void RegisterWithGenericTypes()
144144
.RegisterSubtype<Dog>(AnimalType.Dog)
145145
.Build());
146146

147-
var json = "{\"catLives\":6,\"age\":11,\"type\":2}";
147+
var json = "{\"type\":2,\"catLives\":6,\"age\":11}";
148148

149149
var result = JsonConvert.SerializeObject(new Cat { Age = 11, Lives = 6 });
150150

@@ -506,10 +506,9 @@ public void TestIfNestedObjectIsSerialized2()
506506
SubExpressionB = new ConstantExpression2 { Value = "B" }
507507
});
508508

509-
Assert.AreEqual("{" +
510-
"\"SubExpressionA\":{\"Value\":\"A\",\"Type\":\"Constant\"}," +
511-
"\"SubExpressionB\":{\"Value\":\"B\",\"Type\":\"Constant\"}" +
512-
",\"Type\":\"Binary\"}", target);
509+
Assert.AreEqual("{\"Type\":\"Binary\"," +
510+
"\"SubExpressionA\":{\"Type\":\"Constant\",\"Value\":\"A\"}," +
511+
"\"SubExpressionB\":{\"Type\":\"Constant\",\"Value\":\"B\"}}", target);
513512
}
514513

515514
[Test]
@@ -532,10 +531,10 @@ public void TestNestedObjectInBothWay()
532531
SubExpressionB = new ManyOrExpression2 { OrExpr = new List<IExpression2> { new ConstantExpression2 { Value = "A" }, new ManyOrExpression2 { OrExpr = new List<IExpression2> { new ConstantExpression2 { Value = "A" }, new ConstantExpression2 { Value = "B" } } } } }
533532
});
534533

535-
var json = "{" +
536-
"\"SubExpressionA\":{\"OrExpr\":[{\"Value\":\"A\",\"Type\":\"Constant\"},{\"Value\":\"B\",\"Type\":\"Constant\"}],\"Type\":\"ManyOr\"}," +
537-
"\"SubExpressionB\":{\"OrExpr\":[{\"Value\":\"A\",\"Type\":\"Constant\"},{\"OrExpr\":[{\"Value\":\"A\",\"Type\":\"Constant\"},{\"Value\":\"B\",\"Type\":\"Constant\"}],\"Type\":\"ManyOr\"}],\"Type\":\"ManyOr\"}" +
538-
",\"Type\":\"Binary\"}";
534+
var json = "{\"Type\":\"Binary\"," +
535+
"\"SubExpressionA\":{\"Type\":\"ManyOr\",\"OrExpr\":[{\"Type\":\"Constant\",\"Value\":\"A\"},{\"Type\":\"Constant\",\"Value\":\"B\"}]}," +
536+
"\"SubExpressionB\":{\"Type\":\"ManyOr\",\"OrExpr\":[{\"Type\":\"Constant\",\"Value\":\"A\"},{\"Type\":\"ManyOr\",\"OrExpr\":[{\"Type\":\"Constant\",\"Value\":\"A\"},{\"Type\":\"Constant\",\"Value\":\"B\"}]}]}" +
537+
"}";
539538
Assert.AreEqual(json, target);
540539

541540

@@ -566,10 +565,10 @@ public void TestNestedObjectInBothWayParallel()
566565
SubExpressionB = new ManyOrExpression2 { OrExpr = new List<IExpression2> { new ConstantExpression2 { Value = "A" }, new ManyOrExpression2 { OrExpr = new List<IExpression2> { new ConstantExpression2 { Value = "A" }, new ConstantExpression2 { Value = "B" } } } } }
567566
});
568567

569-
var json = "{" +
570-
"\"SubExpressionA\":{\"OrExpr\":[{\"Value\":\"A\",\"Type\":\"Constant\"},{\"Value\":\"B\",\"Type\":\"Constant\"}],\"Type\":\"ManyOr\"}," +
571-
"\"SubExpressionB\":{\"OrExpr\":[{\"Value\":\"A\",\"Type\":\"Constant\"},{\"OrExpr\":[{\"Value\":\"A\",\"Type\":\"Constant\"},{\"Value\":\"B\",\"Type\":\"Constant\"}],\"Type\":\"ManyOr\"}],\"Type\":\"ManyOr\"}" +
572-
",\"Type\":\"Binary\"}";
568+
var json = "{\"Type\":\"Binary\"," +
569+
"\"SubExpressionA\":{\"Type\":\"ManyOr\",\"OrExpr\":[{\"Type\":\"Constant\",\"Value\":\"A\"},{\"Type\":\"Constant\",\"Value\":\"B\"}]}," +
570+
"\"SubExpressionB\":{\"Type\":\"ManyOr\",\"OrExpr\":[{\"Type\":\"Constant\",\"Value\":\"A\"},{\"Type\":\"ManyOr\",\"OrExpr\":[{\"Type\":\"Constant\",\"Value\":\"A\"},{\"Type\":\"Constant\",\"Value\":\"B\"}]}]}" +
571+
"}";
573572
Assert.AreEqual(json, target);
574573

575574

JsonSubTypes/JsonSubtypesConverterBuilder.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class JsonSubtypesConverterBuilder
3131
private string _discriminatorProperty;
3232
private readonly NullableDictionary<object, Type> _subTypeMapping = new NullableDictionary<object, Type>();
3333
private bool _serializeDiscriminatorProperty;
34-
private bool _addDiscriminatorFirst;
34+
private bool _addDiscriminatorFirst = true;
3535
private Type _fallbackSubtype;
3636

3737
public static JsonSubtypesConverterBuilder Of(Type baseType, string discriminatorProperty)
@@ -51,7 +51,7 @@ public static JsonSubtypesConverterBuilder Of<T>(string discriminatorProperty)
5151

5252
public JsonSubtypesConverterBuilder SerializeDiscriminatorProperty()
5353
{
54-
return SerializeDiscriminatorProperty(false);
54+
return SerializeDiscriminatorProperty(true);
5555
}
5656

5757
public JsonSubtypesConverterBuilder SerializeDiscriminatorProperty(bool addDiscriminatorFirst)

0 commit comments

Comments
 (0)