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 ElementContainer
public DataTypes ContainerDatatype { get; set; }
public List<ElementContainer> ElementContainer { get; set; }
public List<Layout> Layout { get; set; }
public static void Test()
var jsonString = GetJson();
var errorStack = new Stack<Newtonsoft.Json.Serialization.ErrorEventArgs>();
var settings = new JsonSerializerSettings
Converters = { new StringEnumConverter() },
Error = (o, e) => errorStack.Push(e)
var root = JsonConvert.DeserializeObject<RootObject>(jsonString, settings);
var last = errorStack.Last();
var member = last.ErrorContext.Member;
var path = last.ErrorContext.Path;
var objectsStack = String.Join(", ", errorStack.Where(e => e.CurrentObject != null).Select(e => e.CurrentObject.ToString()));
Console.WriteLine("Exception parsing JSON: ");
Console.WriteLine(ex.Message);
Console.WriteLine("Error context details: ");
Console.WriteLine(" Path: {0}\n Member: {1}\n Object stack = {{{2}}}",
path, member, objectsStack);
Console.WriteLine(" Data.Count = {0}", ex.Data.Count);
static bool TryDeserialize<TRootObject>(string jsonString, out TRootObject root)
var errorStack = new Stack<Newtonsoft.Json.Serialization.ErrorEventArgs>();
var settings = new JsonSerializerSettings
Converters = { new StringEnumConverter() },
Error = (o, e) => errorStack.Push(e)
root = JsonConvert.DeserializeObject<TRootObject>(jsonString, settings);
var last = errorStack.Last();
var member = last.ErrorContext.Member;
var path = last.ErrorContext.Path;
var objectsStack = String.Join(", ", errorStack
.Where(e => e.CurrentObject != null)
.Select(e => e.CurrentObject.ToString()));
Console.WriteLine("Exception parsing JSON: ");
Console.WriteLine(ex.Message);
Console.WriteLine("Error context details: ");
Console.WriteLine("sdsd Data.Count = {0}", ex.Data.Count);
Console.WriteLine(" Path: {0}\n Member: {1}\n Object stack = {{{2}}}",
path, member, objectsStack);
root = default(TRootObject);
""ContainerDatatype"":""[IncorrectDataType]""
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: ");