using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
static readonly int[] SomeArrayDefaultValue = new int[] { 4, 6, 12 };
[JsonProperty(NullValueHandling = NullValueHandling.Include, DefaultValueHandling = DefaultValueHandling.Include)]
public int[] SomeArray = (int[])SomeArrayDefaultValue.Clone();
public bool ShouldSerializeSomeArray()
return !(SomeArray != null && SomeArray.SequenceEqual(SomeArrayDefaultValue));
public static void Test()
Console.WriteLine("\nTesting simple fix using ShouldSerializeXXX() functionality.");
public static void TestOriginal()
var serializerSettings = new JsonSerializerSettings
DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate,
JsonConvert.PopulateObject("{}", a, serializerSettings);
Console.WriteLine(JsonConvert.SerializeObject(a, serializerSettings));
Assert.IsTrue(JsonConvert.SerializeObject(a, serializerSettings) == "{}");
a.SomeArray = new int[] { 4, 6, 12 };
Console.WriteLine(JsonConvert.SerializeObject(a, serializerSettings));
Assert.IsTrue(JsonConvert.SerializeObject(a, serializerSettings) == "{}");
var serializerSettings = new JsonSerializerSettings
DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate,
var a1 = JsonConvert.DeserializeObject<A>("{}", serializerSettings);
Assert.IsTrue(a1.SomeArray.SequenceEqual(new int[] { 4, 6, 12 }));
var a2 = JsonConvert.DeserializeObject<A>("{}", serializerSettings);
Assert.IsTrue(a2.SomeArray.SequenceEqual(new int[] { 4, 6, 12 }));
public static void Main()
Console.WriteLine("Environment version: " + Environment.Version);
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");