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