コード例 #1
0
        /// <summary>
        /// Writes a <see cref="Object"/> value.
        /// An error will raised if the value cannot be written as a single JSON token.
        /// </summary>
        /// <param name="value">The <see cref="Object"/> value to write.</param>
        public virtual void WriteValue(object value)
        {
            if (value == null)
            {
                WriteNull();
                return;
            }
            else if (ConvertUtils.IsConvertible(value))
            {
                IConvertible convertible = ConvertUtils.ToConvertible(value);

                switch (convertible.GetTypeCode())
                {
                case TypeCode.String:
                    WriteValue(convertible.ToString(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.Char:
                    WriteValue(convertible.ToChar(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.Boolean:
                    WriteValue(convertible.ToBoolean(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.SByte:
                    WriteValue(convertible.ToSByte(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.Int16:
                    WriteValue(convertible.ToInt16(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.UInt16:
                    WriteValue(convertible.ToUInt16(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.Int32:
                    WriteValue(convertible.ToInt32(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.Byte:
                    WriteValue(convertible.ToByte(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.UInt32:
                    WriteValue(convertible.ToUInt32(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.Int64:
                    WriteValue(convertible.ToInt64(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.UInt64:
                    WriteValue(convertible.ToUInt64(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.Single:
                    WriteValue(convertible.ToSingle(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.Double:
                    WriteValue(convertible.ToDouble(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.DateTime:
                    WriteValue(convertible.ToDateTime(CultureInfo.InvariantCulture));
                    return;

                case TypeCode.Decimal:
                    WriteValue(convertible.ToDecimal(CultureInfo.InvariantCulture));
                    return;

#if !(NETFX_CORE || PORTABLE)
                case TypeCode.DBNull:
                    WriteNull();
                    return;
#endif
                }
            }
#if !PocketPC && !NET20
            else if (value is DateTimeOffset)
            {
                WriteValue((DateTimeOffset)value);
                return;
            }
#endif
            else if (value is byte[])
            {
                WriteValue((byte[])value);
                return;
            }
            else if (value is Guid)
            {
                WriteValue((Guid)value);
                return;
            }
            else if (value is Uri)
            {
                WriteValue((Uri)value);
                return;
            }
            else if (value is TimeSpan)
            {
                WriteValue((TimeSpan)value);
                return;
            }

            throw JsonWriterException.Create(this, "Unsupported type: {0}. Use the JsonSerializer class to get the object's JSON representation.".FormatWith(CultureInfo.InvariantCulture, value.GetType()), null);
        }
コード例 #2
0
ファイル: JsonConvert.cs プロジェクト: myl2232/ArkCrossEngine
        /// <summary>
        /// Converts the <see cref="Object"/> to its JSON string representation.
        /// </summary>
        /// <param name="value">The value to convert.</param>
        /// <returns>A JSON string representation of the <see cref="Object"/>.</returns>
        public static string ToString(object value)
        {
            if (value == null)
            {
                return(Null);
            }

            IConvertible convertible = ConvertUtils.ToConvertible(value);

            if (convertible != null)
            {
                switch (convertible.GetTypeCode())
                {
                case TypeCode.String:
                    return(ToString(convertible.ToString(CultureInfo.InvariantCulture)));

                case TypeCode.Char:
                    return(ToString(convertible.ToChar(CultureInfo.InvariantCulture)));

                case TypeCode.Boolean:
                    return(ToString(convertible.ToBoolean(CultureInfo.InvariantCulture)));

                case TypeCode.SByte:
                    return(ToString(convertible.ToSByte(CultureInfo.InvariantCulture)));

                case TypeCode.Int16:
                    return(ToString(convertible.ToInt16(CultureInfo.InvariantCulture)));

                case TypeCode.UInt16:
                    return(ToString(convertible.ToUInt16(CultureInfo.InvariantCulture)));

                case TypeCode.Int32:
                    return(ToString(convertible.ToInt32(CultureInfo.InvariantCulture)));

                case TypeCode.Byte:
                    return(ToString(convertible.ToByte(CultureInfo.InvariantCulture)));

                case TypeCode.UInt32:
                    return(ToString(convertible.ToUInt32(CultureInfo.InvariantCulture)));

                case TypeCode.Int64:
                    return(ToString(convertible.ToInt64(CultureInfo.InvariantCulture)));

                case TypeCode.UInt64:
                    return(ToString(convertible.ToUInt64(CultureInfo.InvariantCulture)));

                case TypeCode.Single:
                    return(ToString(convertible.ToSingle(CultureInfo.InvariantCulture)));

                case TypeCode.Double:
                    return(ToString(convertible.ToDouble(CultureInfo.InvariantCulture)));

                case TypeCode.DateTime:
                    return(ToString(convertible.ToDateTime(CultureInfo.InvariantCulture)));

                case TypeCode.Decimal:
                    return(ToString(convertible.ToDecimal(CultureInfo.InvariantCulture)));

#if !(NETFX_CORE || PORTABLE)
                case TypeCode.DBNull:
                    return(Null);
#endif
                }
            }
#if !PocketPC && !NET20
            else if (value is DateTimeOffset)
            {
                return(ToString((DateTimeOffset)value));
            }
#endif
            else if (value is Guid)
            {
                return(ToString((Guid)value));
            }
            else if (value is Uri)
            {
                return(ToString((Uri)value));
            }
            else if (value is TimeSpan)
            {
                return(ToString((TimeSpan)value));
            }

            throw new ArgumentException("Unsupported type: {0}. Use the JsonSerializer class to get the object's JSON representation.".FormatWith(CultureInfo.InvariantCulture, value.GetType()));
        }