#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
// * to copy, distribute, display, and perform the work
// * to make derivative works
// * to make commercial use of the work
//
// Under the following conditions:
// * You must attribute the work in the manner specified by the author or licensor:
// - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
// * For any reuse or distribution, you must make clear to others the license terms of this work.
// * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.ComponentModel;
namespace MySpace.Common.IO.JSON.Utilities
{
internal static class ReflectionUtils
{
public static T Convert<T>(object initialValue)
{
Type targetType = typeof(T);
Type initialType = (initialValue != null) ? initialValue.GetType() : null;
TypeConverter converter = TypeDescriptor.GetConverter(targetType);
if (converter == null || !converter.CanConvertFrom(initialType))
throw new ApplicationException(string.Format("Could not convert from {0} to {1}", initialType, targetType));
return (T)converter.ConvertFrom(initialValue);
}
}
}
Reflection
Is it a SubClass for another class
#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
// * to copy, distribute, display, and perform the work
// * to make derivative works
// * to make commercial use of the work
//
// Under the following conditions:
// * You must attribute the work in the manner specified by the author or licensor:
// - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
// * For any reuse or distribution, you must make clear to others the license terms of this work.
// * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.ComponentModel;
namespace MySpace.Common.IO.JSON.Utilities
{
internal static class ReflectionUtils
{
public static bool IsSubClass(Type type, Type check)
{
if (type == null || check == null)
return false;
if (type == check && type.IsGenericType)
return true;
if (check.IsInterface)
{
foreach (Type t in type.GetInterfaces())
{
if (IsSubClass(t, check)) return true;
}
}
if (type.IsGenericType && !type.IsGenericTypeDefinition)
{
if (IsSubClass(type.GetGenericTypeDefinition(), check))
return true;
}
return IsSubClass(type.BaseType, check);
}
}
}
Is Object Unitialized Value
#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
// * to copy, distribute, display, and perform the work
// * to make derivative works
// * to make commercial use of the work
//
// Under the following conditions:
// * You must attribute the work in the manner specified by the author or licensor:
// - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
// * For any reuse or distribution, you must make clear to others the license terms of this work.
// * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.ComponentModel;
namespace MySpace.Common.IO.JSON.Utilities
{
internal static class ReflectionUtils
{
private static bool IsValueTypeUnitializedValue(ValueType value, Type valueType)
{
if (valueType.IsGenericType && valueType.GetGenericTypeDefinition() == typeof(Nullable<>))
return (value == null);
else
return value.Equals((ValueType)Activator.CreateInstance(valueType));
}
public static bool IsObjectUnitializedValue(object value, Type valueType)
{
if (valueType.IsValueType)
return IsValueTypeUnitializedValue((ValueType)value, valueType);
else if (valueType.IsClass)
return (value == null);
else
throw new ArgumentException("Type is neither a ValueType or a Class", "valueType");
}
}
}
Get Type Unitialized Value
#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
// * to copy, distribute, display, and perform the work
// * to make derivative works
// * to make commercial use of the work
//
// Under the following conditions:
// * You must attribute the work in the manner specified by the author or licensor:
// - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
// * For any reuse or distribution, you must make clear to others the license terms of this work.
// * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.ComponentModel;
namespace MySpace.Common.IO.JSON.Utilities
{
internal static class ReflectionUtils
{
public static object GetTypeUnitializedValue(Type type)
{
if (type.IsValueType)
return Activator.CreateInstance(type);
else if (type.IsClass)
return null;
else
throw new ArgumentException("Type is neither a ValueType or a Class", "type");
}
}
}
Is Value Type Unitialized Value
#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
// * to copy, distribute, display, and perform the work
// * to make derivative works
// * to make commercial use of the work
//
// Under the following conditions:
// * You must attribute the work in the manner specified by the author or licensor:
// - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
// * For any reuse or distribution, you must make clear to others the license terms of this work.
// * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.ComponentModel;
namespace MySpace.Common.IO.JSON.Utilities
{
internal static class ReflectionUtils
{
private static bool IsValueTypeUnitializedValue(ValueType value, Type valueType)
{
if (valueType.IsGenericType && valueType.GetGenericTypeDefinition() == typeof(Nullable<>))
return (value == null);
else
return value.Equals((ValueType)Activator.CreateInstance(valueType));
}
}
}
Is it a Nullable Type
#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
// * to copy, distribute, display, and perform the work
// * to make derivative works
// * to make commercial use of the work
//
// Under the following conditions:
// * You must attribute the work in the manner specified by the author or licensor:
// - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
// * For any reuse or distribution, you must make clear to others the license terms of this work.
// * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.ComponentModel;
namespace MySpace.Common.IO.JSON.Utilities
{
internal static class ReflectionUtils
{
public static bool IsNullableType(Type underlyingType)
{
if (underlyingType.IsValueType)
{
if (!underlyingType.IsGenericType && typeof(Nullable<>).IsAssignableFrom(underlyingType))
return false;
}
return true;
}
}
}
Does a given Type have a Default Constructor
#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
// * to copy, distribute, display, and perform the work
// * to make derivative works
// * to make commercial use of the work
//
// Under the following conditions:
// * You must attribute the work in the manner specified by the author or licensor:
// - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
// * For any reuse or distribution, you must make clear to others the license terms of this work.
// * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.ComponentModel;
namespace MySpace.Common.IO.JSON.Utilities
{
internal static class ReflectionUtils
{
public static bool HasDefaultConstructor(Type t)
{
if (t == null)
throw new ArgumentNullException("t");
return (t.GetConstructor(BindingFlags.Public | BindingFlags.Instance, null, new Type[0], null) != null);
}
}
}