public override void Write(TypeInfo info, BinaryWriter buffer, object value, BinaryJSONWriter binaryJsonWriter) { buffer.Write(BinaryValue.ENUM); var result = Convert.ChangeType(value, info.EnumUnderlyingType); var infoType = info.TypeDescriptions.GetType(info.EnumUnderlyingType); binaryJsonWriter.Write(infoType, result, buffer); }
public TypeDescription() { _nullTypeInfo = new TypeInfo(this, null); _serializations[(int)TypeValue.Primitive] = new PrimitiveSerialization(); _serializations[(int)TypeValue.Null] = new NullSerialization(); _serializations[(int)TypeValue.String] = new StringSerialization(); _serializations[(int)TypeValue.Object] = new ObjectSerialization(); _serializations[(int)TypeValue.Array] = new ArraySerialization(); _serializations[(int)TypeValue.List] = new ArraySerialization(); _serializations[(int)TypeValue.Dictionary] = new DictionarySerialization(); _serializations[(int)TypeValue.Enum] = new EnumSerialization(); _binaryValue.Add(typeof(bool), BinaryValue.BOOLEAN); _binaryValue.Add(typeof(byte), BinaryValue.BYTE); _binaryValue.Add(typeof(sbyte), BinaryValue.SBYTE); _binaryValue.Add(typeof(Int16), BinaryValue.INT16); _binaryValue.Add(typeof(UInt16), BinaryValue.UINT16); _binaryValue.Add(typeof(Int32), BinaryValue.INT32); _binaryValue.Add(typeof(UInt32), BinaryValue.UINT32); _binaryValue.Add(typeof(Int64), BinaryValue.INT64); _binaryValue.Add(typeof(UInt64), BinaryValue.UINT64); _binaryValue.Add(typeof(float), BinaryValue.FLOAT); _binaryValue.Add(typeof(Decimal), BinaryValue.DECIMAL); _binaryValue.Add(typeof(Char), BinaryValue.CHAR); _binaryValue.Add(typeof(Double), BinaryValue.DOUBLE); _binaryValue.Add(typeof(String), BinaryValue.STRING); }
public override void Write(TypeInfo info, BinaryWriter buffer, object value, BinaryJSONWriter binaryJsonWriter) { if (value == null) { buffer.Write(BinaryValue.NULL); } else { buffer.Write(BinaryValue.DICTIONARY); var dictionary = (IDictionary)value; var count = dictionary.Count; buffer.Write((int)count); var keyType = dictionary.GetType().GetGenericArguments()[0]; if (keyType.IsEnum) keyType = Enum.GetUnderlyingType(keyType); var code = info.TypeDescriptions.GetCodeByPrimitiveType(keyType); buffer.Write(code); foreach (var key in dictionary.Keys) { WriteField(key, buffer, code); var keyValue = dictionary[key]; binaryJsonWriter.Write(keyValue, buffer); } } }
public override void Write(TypeInfo info, BinaryWriter buffer, object value, BinaryJSONWriter binaryJsonWriter) { if (value == null) { buffer.Write(BinaryValue.NULL); } else { buffer.Write(BinaryValue.STRING); var bytes = Encoding.UTF8.GetBytes((string)value); buffer.Write((int)bytes.Length); buffer.Write(bytes); } }
public override void Write(TypeInfo info, BinaryWriter buffer, object value, BinaryJSONWriter binaryJsonWriter) { if (value == null) { buffer.Write(BinaryValue.NULL); } else { buffer.Write(BinaryValue.OBJECT); buffer.Write((int)info.Fields.Length); foreach (var field in info.Fields) { WriteField(buffer, field.Name); var typeInfo = info.TypeDescriptions.GetType(field.FieldType); binaryJsonWriter.Write(typeInfo, field.GetValue(value), buffer); } } }
public override void Write(TypeInfo info, BinaryWriter buffer, object value, BinaryJSONWriter binaryJsonWriter) { if (value == null) { buffer.Write(BinaryValue.NULL); } else { var arr = value as Array; IEnumerable enumerable = null; int count = 0; if (arr != null) { count = arr.Length; enumerable = arr; } else { var coll = value as IList; if (coll != null) { enumerable = coll; count = coll.Count; } } if (enumerable != null) { buffer.Write(BinaryValue.ARRAY); buffer.Write((int)count); foreach (var item in enumerable) { binaryJsonWriter.Write(item, buffer); } } } }
internal void Write(TypeInfo info, object value, BinaryWriter buffer) { _typeDescriptor.Get(info).Write(info, buffer, value, this); }
public override void Write(TypeInfo info, BinaryWriter buffer, object value, BinaryJSONWriter binaryJsonWriter) { buffer.Write(BinaryValue.NULL); }
public virtual void Write(TypeInfo info, BinaryWriter buffer, object value, BinaryJSONWriter binaryJsonWriter) { }
public TypeInfo GetType(Type type) { if (type == null) return _nullTypeInfo; TypeInfo result; if (!_descriptions.TryGetValue(type, out result)) { result = new TypeInfo(this, type); _descriptions.Add(type, result); } return result; }
public TypeSerialization Get(TypeInfo info) { return _serializations[(int)info.TypeValue]; }
public override void Write(TypeInfo info, BinaryWriter buffer, object value, BinaryJSONWriter binaryJsonWriter) { var type = info.Type; if (type == TypeInfo.Int32) { int i = (int) value; if (i <= byte.MaxValue && i >= byte.MinValue) { buffer.Write(BinaryValue.BYTE); buffer.Write((byte)i); } else if (i <= sbyte.MaxValue && i >= sbyte.MinValue) { buffer.Write(BinaryValue.SBYTE); buffer.Write((sbyte)i); } else if (i <= Int16.MaxValue && i >= Int16.MinValue) { buffer.Write(BinaryValue.INT16); buffer.Write((Int16)i); } else if (i <= UInt16.MaxValue && i >= UInt16.MinValue) { buffer.Write(BinaryValue.UINT16); buffer.Write((UInt16)i); } else { buffer.Write(BinaryValue.INT32); buffer.Write(i); } } else if (type == TypeInfo.Float) { buffer.Write(BinaryValue.FLOAT); buffer.Write((float)value); } else if (type == TypeInfo.Bool) { buffer.Write(BinaryValue.BOOLEAN); buffer.Write((bool)value); } else if (type == TypeInfo.Double) { buffer.Write(BinaryValue.DOUBLE); buffer.Write((double)value); } else if (type == TypeInfo.Int16) { Int16 i = (Int16)value; if (i <= byte.MaxValue && i >= byte.MinValue) { buffer.Write(BinaryValue.BYTE); buffer.Write((byte)i); } else if (i <= sbyte.MaxValue && i >= sbyte.MinValue) { buffer.Write(BinaryValue.SBYTE); buffer.Write((sbyte)i); } else { buffer.Write(BinaryValue.INT16); buffer.Write(i); } } else if (type == TypeInfo.Byte) { buffer.Write(BinaryValue.BYTE); buffer.Write((byte)value); } else if (type == TypeInfo.SByte) { buffer.Write(BinaryValue.SBYTE); buffer.Write((sbyte)value); } else if (type == TypeInfo.UInt32) { UInt32 i = (UInt32)value; if (i <= byte.MaxValue) { buffer.Write(BinaryValue.BYTE); buffer.Write((byte)i); } else if (i <= UInt16.MaxValue) { buffer.Write(BinaryValue.UINT16); buffer.Write((UInt16)i); } else { buffer.Write(BinaryValue.UINT32); buffer.Write(i); } } else if (type == TypeInfo.UInt16) { UInt16 i = (UInt16)value; if (i <= byte.MaxValue) { buffer.Write(BinaryValue.BYTE); buffer.Write((byte)i); } else { buffer.Write(BinaryValue.UINT16); buffer.Write(i); } } else if (type == TypeInfo.Int64) { Int64 i = (Int64)value; if (i <= byte.MaxValue && i >= byte.MinValue) { buffer.Write(BinaryValue.BYTE); buffer.Write((byte)i); } else if (i <= sbyte.MaxValue && i >= sbyte.MinValue) { buffer.Write(BinaryValue.SBYTE); buffer.Write((sbyte)i); } else if (i <= Int16.MaxValue && i >= Int16.MinValue) { buffer.Write(BinaryValue.INT16); buffer.Write((Int16)i); } else if (i <= UInt16.MaxValue && i >= UInt16.MinValue) { buffer.Write(BinaryValue.UINT16); buffer.Write((UInt16)i); } else if (i <= Int32.MaxValue && i >= Int32.MinValue) { buffer.Write(BinaryValue.INT32); buffer.Write((int)i); } else if (i <= UInt32.MaxValue && i >= UInt32.MaxValue) { buffer.Write(BinaryValue.UINT32); buffer.Write((UInt32)i); } else { buffer.Write(BinaryValue.INT64); buffer.Write(i); } } else if (type == TypeInfo.UInt64) { UInt64 i = (UInt64)value; if (i <= byte.MaxValue) { buffer.Write(BinaryValue.BYTE); buffer.Write((byte)i); } else if (i <= UInt16.MaxValue) { buffer.Write(BinaryValue.UINT16); buffer.Write((UInt16)i); } else if (i <= Int32.MaxValue) { buffer.Write(BinaryValue.INT32); buffer.Write((int)i); } else if (i <= UInt32.MaxValue) { buffer.Write(BinaryValue.UINT32); buffer.Write((UInt32)i); } else { buffer.Write(BinaryValue.UINT64); buffer.Write(i); } } else if (type == TypeInfo.Decimal) { buffer.Write(BinaryValue.DECIMAL); buffer.Write((decimal)value); } else if (type == TypeInfo.Char) { buffer.Write(BinaryValue.CHAR); buffer.Write((char)value); } }