270 lines
6.5 KiB
C#

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);
}
}
}