using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
internal static void Test()
MyClass1 c1 = new MyClass1();
string toJsonString = JsonConvert.SerializeObject(c1, Formatting.Indented,
new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Include });
Console.WriteLine("Initial JSON: ");
Console.WriteLine(toJsonString);
MyClass1 fromJson = JsonConvert.DeserializeObject<MyClass1>(toJsonString);
var json2 = JsonConvert.SerializeObject(fromJson, Formatting.Indented);
Console.WriteLine("Deserialized and re-serialized JSON: ");
Console.WriteLine(json2);
if (!JToken.DeepEquals(JToken.Parse(toJsonString), JToken.Parse(json2)))
Console.WriteLine("Initial and re-serialized JSON are NOT EQUIVALENT!");
throw new InvalidOperationException("(!JToken.DeepEquals(JToken.Parse(toJsonString), JToken.Parse(json2)))");
Console.WriteLine("Initial and re-serialized are equivalent.");
public class MyClass1 : List<MyClass2>
this.Add(new MyClass2(new string[] { "stringInput1", "stringInput2" },
new char[] { 'a', 'b', 'c', '.' },
new List<MyClass3>() { new MyClass3("ListInput1", new Regex(@"[A-Z]")), new MyClass3("ListInput2", new Regex(@"[0-9]")) }
private string[] _myStringArray = null;
private char[] _myCharArray = null;
private string _myString = null;
private List<MyClass3> _myClass3Object = null;
public MyClass2(string[] myStringArray, char[] myCharArray, string myString, List<MyClass3> myClass3Object)
_myStringArray = myStringArray;
_myCharArray = myCharArray;
_myClass3Object = myClass3Object;
public string[] MyStringArray { get { return _myStringArray; } }
public char[] MyCharArray { get { return _myCharArray; } }
public string MyString { get { return _myString; } }
public List<MyClass3> MyClass3Object { get { return _myClass3Object; } }
private string _myString = null;
public MyClass3(string myString, Regex myRegex)
public string MyString { get { return _myString; } }
public Regex MyRegex { get { return _myRegex; } }
public static void Main()
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);