public static object DecodeValue(object value, Type targetType)
        {
            if (value == null)
            {
                return(null);
            }

            if (JsonBuilder.IsSupported(value))
            {
                value = ConvertValue(value, targetType);
            }

            // use a registered decoder
            if (value != null && !targetType.IsAssignableFrom(value.GetType()))
            {
                Decoder decoder = GetDecoder(targetType);
                value = decoder(targetType, value);
            }

            if (value != null && targetType.IsAssignableFrom(value.GetType()))
            {
                return(value);
            }
            else
            {
                Console.WriteLine("Couldn't decode: " + targetType);
                return(null);
            }
        }
 public static void EncodeValue(object value, JsonBuilder builder)
 {
     if (JsonBuilder.IsSupported(value))
     {
         builder.AppendValue(value);
     }
     else
     {
         Encoder encoder = GetEncoder(value.GetType());
         if (encoder != null)
         {
             encoder(value, builder);
         }
         else
         {
             Console.WriteLine("Encoder for " + value.GetType() + " not found");
         }
     }
 }