Пример #1
0
		private void SerializeValue(JsonWriter writer, object value)
		{
			JsonConverter converter;

			if (value == null)
			{
				writer.WriteNull();
			}
			else if (HasMatchingConverter(value.GetType(), out converter))
			{
				converter.WriteJson(writer, value);
			}
			else if (value is IConvertible)
			{
				IConvertible convertible = value as IConvertible;

				switch (convertible.GetTypeCode())
				{
					case TypeCode.String:
						writer.WriteValue((string)convertible);
						break;
					case TypeCode.Char:
						writer.WriteValue((char)convertible);
						break;
					case TypeCode.Boolean:
						writer.WriteValue((bool)convertible);
						break;
					case TypeCode.SByte:
						writer.WriteValue((sbyte)convertible);
						break;
					case TypeCode.Int16:
						writer.WriteValue((short)convertible);
						break;
					case TypeCode.UInt16:
						writer.WriteValue((ushort)convertible);
						break;
					case TypeCode.Int32:
						writer.WriteValue((int)convertible);
						break;
					case TypeCode.Byte:
						writer.WriteValue((byte)convertible);
						break;
					case TypeCode.UInt32:
						writer.WriteValue((uint)convertible);
						break;
					case TypeCode.Int64:
						writer.WriteValue((long)convertible);
						break;
					case TypeCode.UInt64:
						writer.WriteValue((ulong)convertible);
						break;
					case TypeCode.Single:
						writer.WriteValue((float)convertible);
						break;
					case TypeCode.Double:
						writer.WriteValue((double)convertible);
						break;
					case TypeCode.DateTime:
						writer.WriteValue((DateTime)convertible);
						break;
					case TypeCode.Decimal:
						writer.WriteValue((decimal)convertible);
						break;
					default:
						SerializeObject(writer, value);
						break;
				}
			}
			else if (value is IList)
			{
				SerializeList(writer, (IList)value);
			}
			else if (value is IDictionary)
			{
				SerializeDictionary(writer, (IDictionary)value);
			}
			else if (value is ICollection)
			{
				SerializeCollection(writer, (ICollection)value);
			}
			else if (value is Identifier)
			{
				writer.WriteRaw(value.ToString());
			}
			else
			{
				SerializeObject(writer, value);
			}
		}