Add copy constructor to JsonSerializerSettings (#2676)
Co-authored-by: Matthew Steeples <matthew@ledgerscope.com>
This commit is contained in:
co-authored by
Matthew Steeples
parent
7f78562d44
commit
71be691f92
@@ -48,6 +48,7 @@ using System.Text.RegularExpressions;
|
|||||||
using Xunit;
|
using Xunit;
|
||||||
using Test = Xunit.FactAttribute;
|
using Test = Xunit.FactAttribute;
|
||||||
using Assert = Newtonsoft.Json.Tests.XUnitAssert;
|
using Assert = Newtonsoft.Json.Tests.XUnitAssert;
|
||||||
|
using TestCase = Xunit.InlineDataAttribute;
|
||||||
#else
|
#else
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
#endif
|
#endif
|
||||||
@@ -8076,6 +8077,128 @@ This is just junk, though.";
|
|||||||
Assert.AreEqual(150, depth);
|
Assert.AreEqual(150, depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if DNXCORE50
|
||||||
|
[Theory]
|
||||||
|
#endif
|
||||||
|
[TestCase(true)]
|
||||||
|
[TestCase(false)]
|
||||||
|
public void ShallowCopy_CopyAllProperties(bool specifyDateFormatString)
|
||||||
|
{
|
||||||
|
var propertyNames = typeof(JsonSerializerSettings).GetProperties().Select(property => property.Name).ToList();
|
||||||
|
|
||||||
|
var settings = new JsonSerializerSettings();
|
||||||
|
if (specifyDateFormatString)
|
||||||
|
{
|
||||||
|
settings.DateFormatString = "yyyy";
|
||||||
|
}
|
||||||
|
|
||||||
|
var clone = new JsonSerializerSettings(settings);
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.DateFormatString, clone.DateFormatString);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.DateFormatString)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.DateFormatHandling, clone.DateFormatHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.DateFormatHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.ReferenceLoopHandling, clone.ReferenceLoopHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.ReferenceLoopHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.MissingMemberHandling, clone.MissingMemberHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.MissingMemberHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.ObjectCreationHandling, clone.ObjectCreationHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.ObjectCreationHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.NullValueHandling, clone.NullValueHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.NullValueHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.DefaultValueHandling, clone.DefaultValueHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.DefaultValueHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.Converters, clone.Converters);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.Converters)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.PreserveReferencesHandling, clone.PreserveReferencesHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.PreserveReferencesHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.TypeNameHandling, clone.TypeNameHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.TypeNameHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.MetadataPropertyHandling, clone.MetadataPropertyHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.MetadataPropertyHandling)));
|
||||||
|
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
|
Assert.AreEqual(settings.TypeNameAssemblyFormat, clone.TypeNameAssemblyFormat);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.TypeNameAssemblyFormat)));
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.TypeNameAssemblyFormatHandling, clone.TypeNameAssemblyFormatHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.TypeNameAssemblyFormatHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.ConstructorHandling, clone.ConstructorHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.ConstructorHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.ContractResolver, clone.ContractResolver);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.ContractResolver)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.EqualityComparer, clone.EqualityComparer);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.EqualityComparer)));
|
||||||
|
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
|
Assert.AreEqual(settings.ReferenceResolver, clone.ReferenceResolver);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.ReferenceResolver)));
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.ReferenceResolverProvider, clone.ReferenceResolverProvider);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.ReferenceResolverProvider)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.TraceWriter, clone.TraceWriter);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.TraceWriter)));
|
||||||
|
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
|
Assert.AreEqual(settings.Binder, clone.Binder);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.Binder)));
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.SerializationBinder, clone.SerializationBinder);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.SerializationBinder)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.Error, clone.Error);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.Error)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.Context, clone.Context);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.Context)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.MaxDepth, clone.MaxDepth);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.MaxDepth)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.Formatting, clone.Formatting);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.Formatting)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.DateTimeZoneHandling, clone.DateTimeZoneHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.DateTimeZoneHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.DateParseHandling, clone.DateParseHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.DateParseHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.FloatFormatHandling, clone.FloatFormatHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.FloatFormatHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.FloatParseHandling, clone.FloatParseHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.FloatParseHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.StringEscapeHandling, clone.StringEscapeHandling);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.StringEscapeHandling)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.Culture, clone.Culture);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.Culture)));
|
||||||
|
|
||||||
|
Assert.AreEqual(settings.CheckAdditionalContent, clone.CheckAdditionalContent);
|
||||||
|
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.CheckAdditionalContent)));
|
||||||
|
|
||||||
|
Assert.AreEqual(0, propertyNames.Count);
|
||||||
|
}
|
||||||
|
|
||||||
private static int GetDepth(JToken o)
|
private static int GetDepth(JToken o)
|
||||||
{
|
{
|
||||||
int depth = 1;
|
int depth = 1;
|
||||||
|
|||||||
@@ -31,6 +31,12 @@ using System.Runtime.Serialization.Formatters;
|
|||||||
using Newtonsoft.Json.Serialization;
|
using Newtonsoft.Json.Serialization;
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Runtime;
|
||||||
|
#if !HAVE_LINQ
|
||||||
|
using Newtonsoft.Json.Utilities.LinqBridge;
|
||||||
|
#else
|
||||||
|
using System.Linq;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace Newtonsoft.Json
|
namespace Newtonsoft.Json
|
||||||
{
|
{
|
||||||
@@ -452,5 +458,44 @@ namespace Newtonsoft.Json
|
|||||||
{
|
{
|
||||||
Converters = new List<JsonConverter>();
|
Converters = new List<JsonConverter>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="JsonSerializerSettings"/> class
|
||||||
|
/// using values copied from the passed in <see cref="JsonSerializerSettings"/>.
|
||||||
|
/// </summary>
|
||||||
|
public JsonSerializerSettings(JsonSerializerSettings original)
|
||||||
|
{
|
||||||
|
_floatParseHandling = original._floatParseHandling;
|
||||||
|
_floatFormatHandling = original._floatFormatHandling;
|
||||||
|
_dateParseHandling = original._dateParseHandling;
|
||||||
|
_dateTimeZoneHandling = original._dateTimeZoneHandling;
|
||||||
|
_dateFormatHandling = original._dateFormatHandling;
|
||||||
|
_formatting = original._formatting;
|
||||||
|
_maxDepth = original._maxDepth;
|
||||||
|
_maxDepthSet = original._maxDepthSet;
|
||||||
|
_dateFormatString = original._dateFormatString;
|
||||||
|
_dateFormatStringSet = original._dateFormatStringSet;
|
||||||
|
_context = original._context;
|
||||||
|
Error = original.Error;
|
||||||
|
SerializationBinder = original.SerializationBinder;
|
||||||
|
TraceWriter = original.TraceWriter;
|
||||||
|
_culture = original._culture;
|
||||||
|
ReferenceResolverProvider = original.ReferenceResolverProvider;
|
||||||
|
EqualityComparer = original.EqualityComparer;
|
||||||
|
ContractResolver = original.ContractResolver;
|
||||||
|
_constructorHandling = original._constructorHandling;
|
||||||
|
_typeNameAssemblyFormatHandling = original._typeNameAssemblyFormatHandling;
|
||||||
|
_metadataPropertyHandling = original._metadataPropertyHandling;
|
||||||
|
_typeNameHandling = original._typeNameHandling;
|
||||||
|
_preserveReferencesHandling = original._preserveReferencesHandling;
|
||||||
|
Converters = original.Converters.ToList();
|
||||||
|
_defaultValueHandling = original._defaultValueHandling;
|
||||||
|
_nullValueHandling = original._nullValueHandling;
|
||||||
|
_objectCreationHandling = original._objectCreationHandling;
|
||||||
|
_missingMemberHandling = original._missingMemberHandling;
|
||||||
|
_referenceLoopHandling = original._referenceLoopHandling;
|
||||||
|
_checkAdditionalContent = original._checkAdditionalContent;
|
||||||
|
_stringEscapeHandling = original._stringEscapeHandling;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user