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 void ShowExplicitImplementations(Type concreteType, Type ifaceType)
InterfaceMapping map = concreteType.GetInterfaceMap(ifaceType);
for (int i = 0; i < map.InterfaceMethods.Length; i++)
MethodInfo ifaceMethod = map.InterfaceMethods[i];
MethodInfo targetMethod = map.TargetMethods[i];
Console.WriteLine(String.Format("{0} maps to {1}", ifaceMethod, targetMethod));
public static void Test()
var config = new Mock<IConfig>();
config.Setup(x => x.Key).Returns("test");
var proxy = config.Object;
var contract = (new DefaultContractResolver()).ResolveContract(proxy.GetType());
Console.WriteLine(proxy.GetType());
if (contract is JsonObjectContract objContract)
foreach (var property in objContract.Properties)
Console.WriteLine(" {0}: {1}", property.UnderlyingName, property.PropertyType);
var json = JsonConvert.SerializeObject(proxy, Newtonsoft.Json.Formatting.Indented);
public static void Main()
Console.WriteLine("Environment version: {0} ({1}), {2}", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription , Environment.Version, Environment.OSVersion);
Console.WriteLine("{0} version: {1}", typeof(JsonSerializer).Namespace, typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");