Esempio n. 1
0
        public static bool TryGetNetObjectFromAmqpObject(object amqpObject, MappingType mappingType, out object netObject)
        {
            netObject = null;
            if (amqpObject == null)
            {
                return(false);
            }
            switch (SerializationUtilities.GetTypeId(amqpObject))
            {
            case PropertyValueType.Byte:
            case PropertyValueType.SByte:
            case PropertyValueType.Char:
            case PropertyValueType.Int16:
            case PropertyValueType.UInt16:
            case PropertyValueType.Int32:
            case PropertyValueType.UInt32:
            case PropertyValueType.Int64:
            case PropertyValueType.UInt64:
            case PropertyValueType.Single:
            case PropertyValueType.Double:
            case PropertyValueType.Decimal:
            case PropertyValueType.Boolean:
            case PropertyValueType.Guid:
            case PropertyValueType.String:
            case PropertyValueType.DateTime:
            {
                netObject = amqpObject;
                return(netObject != null);
            }

            case PropertyValueType.Uri:
            case PropertyValueType.DateTimeOffset:
            case PropertyValueType.TimeSpan:
            case PropertyValueType.Stream:
            {
                return(netObject != null);
            }

            case PropertyValueType.Unknown:
            {
                if (amqpObject is AmqpSymbol)
                {
                    netObject = ((AmqpSymbol)amqpObject).Value;
                    return(netObject != null);
                }
                else if (amqpObject is ArraySegment <byte> )
                {
                    ArraySegment <byte> nums = (ArraySegment <byte>)amqpObject;
                    if (nums.Count != (int)nums.Array.Length)
                    {
                        byte[] numArray = new byte[nums.Count];
                        Buffer.BlockCopy(nums.Array, nums.Offset, numArray, 0, nums.Count);
                        netObject = numArray;
                        return(netObject != null);
                    }
                    else
                    {
                        netObject = nums.Array;
                        return(netObject != null);
                    }
                }
                else if (!(amqpObject is DescribedType))
                {
                    if (mappingType == MappingType.ApplicationProperty)
                    {
                        throw Microsoft.ServiceBus.Messaging.FxTrace.Exception.AsError(new SerializationException(SRClient.FailedToSerializeUnsupportedType(amqpObject.GetType().FullName)), null);
                    }
                    if (!(amqpObject is AmqpMap))
                    {
                        netObject = amqpObject;
                        return(netObject != null);
                    }
                    else
                    {
                        AmqpMap amqpMaps = (AmqpMap)amqpObject;
                        Dictionary <string, object> strs = new Dictionary <string, object>();
                        foreach (KeyValuePair <MapKey, object> keyValuePair in (IEnumerable <KeyValuePair <MapKey, object> >)amqpMaps)
                        {
                            strs.Add(keyValuePair.Key.ToString(), keyValuePair.Value);
                        }
                        netObject = strs;
                        return(netObject != null);
                    }
                }
                else
                {
                    DescribedType describedType = (DescribedType)amqpObject;
                    if (!(describedType.Descriptor is AmqpSymbol))
                    {
                        return(netObject != null);
                    }
                    AmqpSymbol descriptor = (AmqpSymbol)describedType.Descriptor;
                    if (descriptor.Equals("com.microsoft:uri"))
                    {
                        netObject = new Uri((string)describedType.Value);
                        return(netObject != null);
                    }
                    else if (!descriptor.Equals("com.microsoft:timespan"))
                    {
                        if (!descriptor.Equals("com.microsoft:datetime-offset"))
                        {
                            return(netObject != null);
                        }
                        netObject = new DateTimeOffset(new DateTime((long)describedType.Value, DateTimeKind.Utc));
                        return(netObject != null);
                    }
                    else
                    {
                        netObject = new TimeSpan((long)describedType.Value);
                        return(netObject != null);
                    }
                }
            }

            default:
            {
                return(netObject != null);
            }
            }
        }
        public static byte[] ConvertNativeValueToByteArray(int messageVersion, PropertyValueType propertyTypeId, object value)
        {
            switch (propertyTypeId)
            {
            case PropertyValueType.Byte:
            {
                return(new byte[] { (byte)value });
            }

            case PropertyValueType.SByte:
            {
                return(new byte[] { (byte)((sbyte)value) });
            }

            case PropertyValueType.Char:
            {
                return(BitConverter.GetBytes((char)value));
            }

            case PropertyValueType.Int16:
            {
                return(BitConverter.GetBytes((short)value));
            }

            case PropertyValueType.UInt16:
            {
                return(BitConverter.GetBytes((ushort)value));
            }

            case PropertyValueType.Int32:
            {
                return(BitConverter.GetBytes((int)value));
            }

            case PropertyValueType.UInt32:
            {
                return(BitConverter.GetBytes((uint)value));
            }

            case PropertyValueType.Int64:
            {
                return(BitConverter.GetBytes((long)value));
            }

            case PropertyValueType.UInt64:
            {
                return(BitConverter.GetBytes((ulong)value));
            }

            case PropertyValueType.Single:
            {
                return(BitConverter.GetBytes((float)value));
            }

            case PropertyValueType.Double:
            {
                return(BitConverter.GetBytes((double)value));
            }

            case PropertyValueType.Decimal:
            {
                if (messageVersion < BrokeredMessage.MessageVersion3)
                {
                    return(Encoding.UTF8.GetBytes(XmlConvert.ToString((decimal)value)));
                }
                int[]  bits      = decimal.GetBits((decimal)value);
                byte[] bytes     = BitConverter.GetBytes(bits[0]);
                byte[] numArray  = BitConverter.GetBytes(bits[1]);
                byte[] bytes1    = BitConverter.GetBytes(bits[2]);
                byte[] numArray1 = BitConverter.GetBytes(bits[3]);
                byte[] numArray2 = new byte[16];
                Buffer.BlockCopy(bytes, 0, numArray2, 0, 4);
                Buffer.BlockCopy(numArray, 0, numArray2, 4, 4);
                Buffer.BlockCopy(bytes1, 0, numArray2, 8, 4);
                Buffer.BlockCopy(numArray1, 0, numArray2, 12, 4);
                return(numArray2);
            }

            case PropertyValueType.Boolean:
            {
                return(BitConverter.GetBytes((bool)value));
            }

            case PropertyValueType.Guid:
            {
                return(((Guid)value).ToByteArray());
            }

            case PropertyValueType.String:
            {
                return(Encoding.UTF8.GetBytes((string)value));
            }

            case PropertyValueType.Uri:
            {
                return(Encoding.UTF8.GetBytes(value.ToString()));
            }

            case PropertyValueType.DateTime:
            {
                return(BitConverter.GetBytes(((DateTime)value).ToBinary()));
            }

            case PropertyValueType.DateTimeOffset:
            {
                if (messageVersion < BrokeredMessage.MessageVersion3)
                {
                    return(Encoding.UTF8.GetBytes(XmlConvert.ToString((DateTimeOffset)value)));
                }
                DateTimeOffset dateTimeOffset = (DateTimeOffset)value;
                byte[]         bytes2         = BitConverter.GetBytes(dateTimeOffset.Ticks);
                byte[]         bytes3         = BitConverter.GetBytes(dateTimeOffset.Offset.Ticks);
                byte[]         numArray3      = new byte[16];
                Buffer.BlockCopy(bytes2, 0, numArray3, 0, 8);
                Buffer.BlockCopy(bytes3, 0, numArray3, 8, 8);
                return(numArray3);
            }

            case PropertyValueType.TimeSpan:
            {
                if (messageVersion >= BrokeredMessage.MessageVersion3)
                {
                    return(BitConverter.GetBytes(((TimeSpan)value).Ticks));
                }
                return(BitConverter.GetBytes(((TimeSpan)value).TotalMilliseconds));
            }

            case PropertyValueType.Stream:
            {
                BufferedInputStream bufferedInputStream = value as BufferedInputStream;
                if (bufferedInputStream == null)
                {
                    throw Microsoft.ServiceBus.Messaging.FxTrace.Exception.AsError(new NotImplementedException(), null);
                }
                long   length    = bufferedInputStream.Length;
                byte[] numArray4 = new byte[checked ((IntPtr)length)];
                bufferedInputStream.Position = (long)0;
                bufferedInputStream.Read(numArray4, 0, (int)length);
                return(numArray4);
            }
            }
            throw Microsoft.ServiceBus.Messaging.FxTrace.Exception.AsError(new SerializationException(SRClient.FailedToSerializeUnsupportedType(value.GetType().FullName)), null);
        }
Esempio n. 3
0
        public static bool TryGetAmqpObjectFromNetObject(object netObject, MappingType mappingType, out object amqpObject)
        {
            amqpObject = null;
            if (netObject == null)
            {
                return(false);
            }
            switch (SerializationUtilities.GetTypeId(netObject))
            {
            case PropertyValueType.Byte:
            case PropertyValueType.SByte:
            case PropertyValueType.Char:
            case PropertyValueType.Int16:
            case PropertyValueType.UInt16:
            case PropertyValueType.Int32:
            case PropertyValueType.UInt32:
            case PropertyValueType.Int64:
            case PropertyValueType.UInt64:
            case PropertyValueType.Single:
            case PropertyValueType.Double:
            case PropertyValueType.Decimal:
            case PropertyValueType.Boolean:
            case PropertyValueType.Guid:
            case PropertyValueType.String:
            case PropertyValueType.DateTime:
            {
                amqpObject = netObject;
                break;
            }

            case PropertyValueType.Uri:
            {
                amqpObject = new DescribedType((object)"com.microsoft:uri", ((Uri)netObject).AbsoluteUri);
                break;
            }

            case PropertyValueType.DateTimeOffset:
            {
                object         obj            = "com.microsoft:datetime-offset";
                DateTimeOffset dateTimeOffset = (DateTimeOffset)netObject;
                amqpObject = new DescribedType(obj, (object)dateTimeOffset.UtcTicks);
                break;
            }

            case PropertyValueType.TimeSpan:
            {
                object   obj1     = "com.microsoft:timespan";
                TimeSpan timeSpan = (TimeSpan)netObject;
                amqpObject = new DescribedType(obj1, (object)timeSpan.Ticks);
                break;
            }

            case PropertyValueType.Stream:
            {
                if (mappingType != MappingType.ApplicationProperty)
                {
                    break;
                }
                amqpObject = MessageConverter.ReadStream((Stream)netObject);
                break;
            }

            case PropertyValueType.Unknown:
            {
                if (!(netObject is Stream))
                {
                    if (mappingType == MappingType.ApplicationProperty)
                    {
                        throw Microsoft.ServiceBus.Messaging.FxTrace.Exception.AsError(new SerializationException(SRClient.FailedToSerializeUnsupportedType(netObject.GetType().FullName)), null);
                    }
                    if (netObject is byte[])
                    {
                        amqpObject = new ArraySegment <byte>((byte[])netObject);
                        break;
                    }
                    else if (!(netObject is IList))
                    {
                        if (!(netObject is IDictionary))
                        {
                            break;
                        }
                        amqpObject = new AmqpMap((IDictionary)netObject);
                        break;
                    }
                    else
                    {
                        amqpObject = netObject;
                        break;
                    }
                }
                else
                {
                    if (mappingType != MappingType.ApplicationProperty)
                    {
                        break;
                    }
                    amqpObject = MessageConverter.ReadStream((Stream)netObject);
                    break;
                }
            }
            }
            return(amqpObject != null);
        }