using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.Contracts;
using System.ComponentModel;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Text.RegularExpressions;
using System.Globalization;
using System.Runtime.Serialization.Formatters;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public IOrderedEnumerable<long> orderedDatas { get; set; }
public string Name { get; set; }
public TestClass(string name, params long[] orderedDatas)
this.orderedDatas = orderedDatas.OrderBy(i => i);
internal static void Test()
TestRoundTrip(new TestClass("tiit"));
TestRoundTrip(new TestClass("tiit", new[] { 4L, 3L, 6L }));
var json = "{ Name: 'tiit', 'orderedDatas': [2,3,4,332232] }"; ;
var result = JsonConvert.DeserializeObject<TestClass>(json);
private static void TestVariableCapture()
var test = new TestClass("tiit");
test.orderedDatas = new[] { 1L, 6L }.OrderBy(i => factor * i);
Console.WriteLine("Serialization of TestClass with factor = 1: ");
Console.WriteLine(JsonConvert.SerializeObject(test, Formatting.Indented));
Console.WriteLine("Serialization of TestClass with factor = -1: ");
Console.WriteLine(JsonConvert.SerializeObject(test, Formatting.Indented));
private static void TestRoundTrip(TestClass result)
var json = JsonConvert.SerializeObject(result);
Console.WriteLine("Testing round-trip for: ");
var result2 = JsonConvert.DeserializeObject<TestClass>(json);
var json2 = JsonConvert.SerializeObject(result2);
if (!JToken.DeepEquals(JToken.Parse(json), JToken.Parse(json2)))
throw new InvalidOperationException("!JToken.DeepEquals(JToken.Parse(json), JToken.Parse(json2))");
if (!result.orderedDatas.SequenceEqual(result2.orderedDatas))
throw new InvalidOperationException("!result.orderedDatas.SequenceEqual(result2.orderedDatas)");
Console.WriteLine("Round-trip successful");
public static void Main()
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);