//using Newtonsoft.Json;
//using System;
//using System.Collections.Generic;
//using System.Reflection;
//using System.Text;

//namespace InABox.Core
//{

//	[JsonConverter(typeof(FileNameJsonConverter))]
//	public struct FileName : IConvertible
//	{
//		private FileName(String data)
//		{
//			Data = data;
//		}

//		public static implicit operator FileName(String data)
//		{
//			return new FileName(data);
//		}

//		public static implicit operator String(FileName memo)
//		{
//			return memo.Data;
//		}

//		public override string ToString()
//		{
//			return Data;
//		}

//		public TypeCode GetTypeCode()
//		{
//			return ((IConvertible)Data).GetTypeCode();
//		}

//		public bool ToBoolean(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToBoolean(provider);
//		}

//		public byte ToByte(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToByte(provider);
//		}

//		public char ToChar(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToChar(provider);
//		}

//		public DateTime ToDateTime(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToDateTime(provider);
//		}

//		public decimal ToDecimal(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToDecimal(provider);
//		}

//		public double ToDouble(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToDouble(provider);
//		}

//		public short ToInt16(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToInt16(provider);
//		}

//		public int ToInt32(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToInt32(provider);
//		}

//		public long ToInt64(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToInt64(provider);
//		}

//		public sbyte ToSByte(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToSByte(provider);
//		}

//		public float ToSingle(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToSingle(provider);
//		}

//		public string ToString(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToString(provider);
//		}

//		public object ToType(Type conversionType, IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToType(conversionType, provider);
//		}

//		public ushort ToUInt16(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToUInt16(provider);
//		}

//		public uint ToUInt32(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToUInt32(provider);
//		}

//		public ulong ToUInt64(IFormatProvider provider)
//		{
//			return ((IConvertible)Data).ToUInt64(provider);
//		}

//		public String Data { get; set; }

//	}

//	public class FileNameJsonConverter : JsonConverter
//	{

//		public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
//		{
//			var filename = (FileName)value;
//			writer.WriteValue(filename.Data);
//		}

//		public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
//		{
//			//CoreUtils.LoadAssemblies();

//			var filename = new FileName();
//			filename.Data = reader.Value != null ? reader.Value.ToString() : "";
//			//Dictionary<String, Object> dict = Serialization.Deserialize<Dictionary<String, Object>>();

//			// Logic Here

//			return filename;
//		}


//		public override bool CanConvert(Type objectType)
//		{
//			return typeof(FileName).GetTypeInfo().IsAssignableFrom(objectType);
//		}
//	}

//}

