using System; // ReSharper disable once CheckNamespace namespace GameDevWare.Serialization { public static class JsonWriterExtentions { public static void WriteMember(this IJsonWriter writer, string memberName) { if (writer == null) throw new ArgumentNullException("writer"); if (memberName == null) throw new ArgumentNullException("memberName"); writer.Write((JsonMember)memberName); } public static void WriteDateTime(this IJsonWriter writer, DateTime date) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(date); } public static void WriteDateTime(this IJsonWriter writer, DateTime? date) { if (writer == null) throw new ArgumentNullException("writer"); if (date == null) writer.WriteNull(); else writer.Write(date.Value); } public static void WriteBoolean(this IJsonWriter writer, bool value) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(value); } public static void WriteBoolean(this IJsonWriter writer, bool? value) { if (writer == null) throw new ArgumentNullException("writer"); if (value == null) writer.WriteNull(); else writer.Write(value.Value); } public static void WriteNumber(this IJsonWriter writer, byte number) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(number); } public static void WriteNumber(this IJsonWriter writer, sbyte number) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(number); } public static void WriteNumber(this IJsonWriter writer, short number) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(number); } public static void WriteNumber(this IJsonWriter writer, ushort number) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(number); } public static void WriteNumber(this IJsonWriter writer, int number) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(number); } public static void WriteNumber(this IJsonWriter writer, uint number) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(number); } public static void WriteNumber(this IJsonWriter writer, long number) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(number); } public static void WriteNumber(this IJsonWriter writer, ulong number) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(number); } public static void WriteNumber(this IJsonWriter writer, float number) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(number); } public static void WriteNumber(this IJsonWriter writer, double number) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(number); } public static void WriteNumber(this IJsonWriter writer, decimal number) { if (writer == null) throw new ArgumentNullException("writer"); writer.Write(number); } public static void WriteNumber(this IJsonWriter writer, byte? number) { if (writer == null) throw new ArgumentNullException("writer"); if (number == null) writer.WriteNull(); else writer.Write(number.Value); } public static void WriteNumber(this IJsonWriter writer, sbyte? number) { if (writer == null) throw new ArgumentNullException("writer"); if (number == null) writer.WriteNull(); else writer.Write(number.Value); } public static void WriteNumber(this IJsonWriter writer, short? number) { if (writer == null) throw new ArgumentNullException("writer"); if (number == null) writer.WriteNull(); else writer.Write(number.Value); } public static void WriteNumber(this IJsonWriter writer, ushort? number) { if (writer == null) throw new ArgumentNullException("writer"); if (number == null) writer.WriteNull(); else writer.Write(number.Value); } public static void WriteNumber(this IJsonWriter writer, int? number) { if (writer == null) throw new ArgumentNullException("writer"); if (number == null) writer.WriteNull(); else writer.Write(number.Value); } public static void WriteNumber(this IJsonWriter writer, uint? number) { if (writer == null) throw new ArgumentNullException("writer"); if (number == null) writer.WriteNull(); else writer.Write(number.Value); } public static void WriteNumber(this IJsonWriter writer, long? number) { if (writer == null) throw new ArgumentNullException("writer"); if (number == null) writer.WriteNull(); else writer.Write(number.Value); } public static void WriteNumber(this IJsonWriter writer, ulong? number) { if (writer == null) throw new ArgumentNullException("writer"); if (number == null) writer.WriteNull(); else writer.Write(number.Value); } public static void WriteNumber(this IJsonWriter writer, float? number) { if (writer == null) throw new ArgumentNullException("writer"); if (number == null) writer.WriteNull(); else writer.Write(number.Value); } public static void WriteNumber(this IJsonWriter writer, double? number) { if (writer == null) throw new ArgumentNullException("writer"); if (number == null) writer.WriteNull(); else writer.Write(number.Value); } public static void WriteNumber(this IJsonWriter writer, decimal? number) { if (writer == null) throw new ArgumentNullException("writer"); if (number == null) writer.WriteNull(); else writer.Write(number.Value); } public static void WriteString(this IJsonWriter writer, string literal) { if (writer == null) throw new ArgumentNullException("writer"); if (literal == null) writer.WriteNull(); else writer.Write(literal); } public static void WriteValue(this IJsonWriter writer, object value, Type valueType) { if (writer == null) throw new ArgumentNullException("writer"); if (value == null) { writer.WriteNull(); return; } var actualValueType = value.GetType(); var serializer = writer.Context.GetSerializerForType(actualValueType); //var objectSerializer = serializer as ObjectSerializer; //if (objectSerializer != null && valueType == actualValueType) // objectSerializer.SuppressTypeInformation = true; // no need to write type information on when type is obvious serializer.Serialize(writer, value); } } }