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;
public class MyClass1: Exception
public MyClass1(string message): base(message) {}
public virtual string ToJson()
var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto, TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Full };
var json = JsonConvert.SerializeObject(this, typeof(object), settings);
public class MyClass2: MyClass1
public MyClass2(string message): base(message) {}
string errorMessage = "test";
public string ErrorMessage
public class MyClass3: MyClass2
public MyClass3(string message): base(message) {}
public static void Test()
MyClass2 m2 = new MyClass2("Experiment");
public static void Test(MyClass1 obj)
var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto, TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Full };
var d = JsonConvert.DeserializeObject(json, settings);
Assert.IsTrue(obj.GetType() == d.GetType());
Assert.Equals(obj.Message, ((Exception)d).Message);
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: ");
public class AssertionFailedException : System.Exception
public AssertionFailedException() : base() { }
public AssertionFailedException(string s) : base(s) { }
public static class Assert
public static void IsTrue(bool value)
public static void IsTrue(bool value, string message)
throw new AssertionFailedException(message ?? "failed");