Stops including the typename for nullable structs using TypeNameHandling.Auto, fixes #1050

This commit is contained in:
TylerBrinkley
2016-10-18 11:34:43 -05:00
parent fac72ad50c
commit 2a28dcc544
2 changed files with 44 additions and 3 deletions
@@ -1934,9 +1934,50 @@ namespace Newtonsoft.Json.Tests.Serialization
Assert.IsNotNull(obtainedDictionary);
}
[Test]
public void SerializeNullableStructProperty_Auto()
{
ObjectWithOptionalMessage objWithMessage = new ObjectWithOptionalMessage(new Message2("Hello!"));
JsonSerializerSettings serializerSettings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
Formatting = Formatting.Indented
};
StringAssert.AreEqual(@"{
""Message"": {
""Value"": ""Hello!""
}
}", JsonConvert.SerializeObject(objWithMessage, serializerSettings));
}
#endif
}
public struct Message2
{
public string Value { get; }
[JsonConstructor]
public Message2(string value)
{
if (value == null) throw new ArgumentNullException(nameof(value));
Value = value;
}
}
public class ObjectWithOptionalMessage
{
public Message2? Message { get; }
public ObjectWithOptionalMessage(Message2? message)
{
Message = message;
}
}
public class DataType
{
public DataType()
@@ -1002,14 +1002,14 @@ namespace Newtonsoft.Json.Serialization
{
if (member != null)
{
if (contract.UnderlyingType != member.PropertyContract.CreatedType)
if (contract.NonNullableUnderlyingType != member.PropertyContract.CreatedType)
{
return true;
}
}
else if (containerContract != null)
{
if (containerContract.ItemContract == null || contract.UnderlyingType != containerContract.ItemContract.CreatedType)
if (containerContract.ItemContract == null || contract.NonNullableUnderlyingType != containerContract.ItemContract.CreatedType)
{
return true;
}
@@ -1018,7 +1018,7 @@ namespace Newtonsoft.Json.Serialization
{
JsonContract rootContract = Serializer._contractResolver.ResolveContract(_rootType);
if (contract.UnderlyingType != rootContract.CreatedType)
if (contract.NonNullableUnderlyingType != rootContract.CreatedType)
{
return true;
}