public void BuildSerializeExpression(MessageMemberInfo member, BinarySerializationContext context) { context.Code.Add( Expression.Call( context.QueueParameter, MessageQueueMethods.WriteFloat, Expression.Add(context.PositionParameter, Expression.Constant(member.Offset)), member.GetProperty(context.MessageParameter))); }
public Expression BuildDeserializeExpression(MessageMemberInfo member, BinarySerializationContext context) { return Expression.Convert( Expression.Call( context.QueueParameter, MessageQueueMethods.ReadFloat, Expression.Add(context.PositionParameter, Expression.Constant(member.Offset))), member.Type); }
public Expression BuildDynamicSizeEvaluator(MessageMemberInfo member, BinarySerializationContext context) { return Expression.RightShift( Expression.Add( Expression.Constant(4), Expression.Call( ((Func<string, int>)CircularArrayQueue.ExtensionMethods.GetByteCount).Method, member.GetProperty(context.MessageParameter))), Expression.Constant(2)); }
public Expression BuildDeserializeExpression(MessageMemberInfo member, BinarySerializationContext context) { return Expression.Call( ((Func<IMessageQueue, int, string>)CircularArrayQueue.ExtensionMethods.ReadStringContent).Method, context.QueueParameter, Expression.Add( context.PositionParameter, Expression.Call( context.QueueParameter, MessageQueueMethods.ReadInt32, Expression.Add(Expression.Constant(member.Offset), context.PositionParameter)))); }
public void BuildSerializeExpression(MessageMemberInfo member, BinarySerializationContext context) { Expression expression = member.GetProperty(context.MessageParameter); if (member.Type != typeof(int)) { expression = Expression.Convert(expression, typeof(int)); } context.Code.Add( Expression.Call( context.QueueParameter, MessageQueueMethods.WriteInt32, Expression.Add(context.PositionParameter, Expression.Constant(member.Offset)), expression)); }
public void BuildSerializeExpression(MessageMemberInfo member, BinarySerializationContext context) { context.Code.Add( Expression.Call( context.QueueParameter, MessageQueueMethods.WriteInt32, Expression.Add(context.PositionParameter, Expression.Constant(member.Offset)), Expression.Subtract(context.DynamicPositionParameter, context.PositionParameter))); context.Code.Add( Expression.Assign( context.DynamicPositionParameter, Expression.Call( ((Func<IMessageQueue, int, string, int>)CircularArrayQueue.ExtensionMethods.WriteStringContent).Method, context.QueueParameter, context.DynamicPositionParameter, member.GetProperty(context.MessageParameter)))); }
public Expression BuildDynamicSizeEvaluator(MessageMemberInfo member, BinarySerializationContext context) { return null; }
public static void BuildDeSerializationAndAssignment( this ITypeBinarySerializer binarySerializer, MessageMemberInfo member, BinarySerializationContext context) { Expression expression = member.GetProperty(context.MessageParameter); context.Code.Add(Expression.Assign(expression, binarySerializer.BuildDeserializeExpression(member, context))); }
public static void Serialize(Object obj, Stream stream) { var memberInfos = obj.GetType().GetProperties().Where(p => Attribute.IsDefined(p, typeof(MessageMemberAttribute))).Select(p => MessageMemberInfo.FromPropertyInfo(p, obj)); foreach (var m in memberInfos.OrderBy(x => x.MessageMemberAttribute.Index)) { if (m.Type == typeof(byte)) { WriteByte((byte)m.Value, stream); } else if (m.Type == typeof(byte[])) { WriteBytes((byte[])m.Value, stream); } else if (m.Type == typeof(short)) { WriteInt16((short)m.Value, stream); } else if (m.Type == typeof(int)) { WriteInt32((int)m.Value, stream); } else if (m.Type == typeof(ushort)) { WriteUInt16((ushort)m.Value, stream); } else if (m.Type == typeof(uint)) { WriteUInt32((uint)m.Value, stream); } else if (m.Type == typeof(int[])) { WriteInt32Array((int[])m.Value, stream); } else if (m.Type == typeof(bool)) { WriteBool((bool)m.Value, stream); } else { Serialize(m.Value, stream); } } stream.Flush(); }