using System; using System.Collections.Generic; using System.Globalization; using System.Text; using ArchestrAServices.ASBContract; namespace Asb.Base.V2; public static class MxValueHelper { public static object ReadByte(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = mxLegacyPayload[0]; return obj; } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; default: obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = (byte)Convert.ChangeType(obj, typeof(byte), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadShort(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = BitConverter.ToInt16(mxLegacyPayload, 0); return obj; } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; default: obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = (short)Convert.ChangeType(obj, typeof(short), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadUnsignedShort(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = BitConverter.ToUInt16(mxLegacyPayload, 0); return obj; } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; default: obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = (ushort)Convert.ChangeType(obj, typeof(ushort), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadInt(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = BitConverter.ToInt32(mxLegacyPayload, 0); return obj; } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; default: obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = (int)Convert.ChangeType(obj, typeof(int), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadUnsignedInt(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = BitConverter.ToUInt32(mxLegacyPayload, 0); return obj; } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; default: obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = (uint)Convert.ChangeType(obj, typeof(uint), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadLong(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = BitConverter.ToInt64(mxLegacyPayload, 0); return obj; } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; default: obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = (long)Convert.ChangeType(obj, typeof(long), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadUnsignedLong(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = BitConverter.ToUInt64(mxLegacyPayload, 0); return obj; } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; default: obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = (ulong)Convert.ChangeType(obj, typeof(ulong), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadSingle(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object obj2 = null; try { DataType dataType = ASBEnumFactory.IntToDataType(mxLegacyType); switch (dataType) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = BitConverter.ToSingle(mxLegacyPayload, 0); return obj; } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; default: obj = ReadString(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { obj2 = ((dataType == DataType.TypeLocalizedText) ? ((object)(float)Convert.ChangeType(obj, typeof(float), ExtractLocaleInfo(mxLegacyType, mxLegacyPayload))) : ((object)(float)Convert.ChangeType(obj, typeof(float), CultureInfo.CurrentCulture))); if (float.IsInfinity((float)obj2)) { obj2 = obj; } } } catch (InvalidCastException) { obj2 = obj; } catch (FormatException) { obj2 = obj; } catch (OverflowException) { obj2 = obj; } return obj2; } public static object ReadDouble(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { DataType dataType = ASBEnumFactory.IntToDataType(mxLegacyType); switch (dataType) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = BitConverter.ToDouble(mxLegacyPayload, 0); return obj; } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; default: obj = ReadString(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = ((dataType == DataType.TypeLocalizedText) ? ((object)(double)Convert.ChangeType(obj, typeof(double), ExtractLocaleInfo(mxLegacyType, mxLegacyPayload))) : ((object)(double)Convert.ChangeType(obj, typeof(double), CultureInfo.CurrentCulture))); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadString(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeLocalizedText: if (mxLegacyPayload.Length > 20) { obj = Encoding.Unicode.GetString(mxLegacyPayload, 20, mxLegacyPayload.Length - 20); } break; default: if (mxLegacyPayload != null) { obj = Encoding.Unicode.GetString(mxLegacyPayload); } return obj; } if (obj != null) { result = (string)Convert.ChangeType(obj, typeof(string), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadLocalizedString(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeString: return Encoding.Unicode.GetString(mxLegacyPayload); case DataType.TypeDouble: return Encoding.Unicode.GetString(mxLegacyPayload); case DataType.TypeLocalizedText: if (mxLegacyPayload.Length > 20) { return Encoding.Unicode.GetString(mxLegacyPayload, 20, mxLegacyPayload.Length - 20); } break; } throw new InvalidCastException("Cannot convert Variant to a string value"); } public static object ReadBoolean(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = Convert.ToBoolean(mxLegacyPayload[0]); return obj; } break; case DataType.TypeByte: if (mxLegacyPayload.Length == 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; default: obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = (bool)Convert.ChangeType(obj, typeof(bool), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadSignedByte(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = (sbyte)mxLegacyPayload[0]; return obj; } break; default: obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = (sbyte)Convert.ChangeType(obj, typeof(sbyte), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadDateTime(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = DateTime.FromFileTimeUtc(BitConverter.ToInt64(mxLegacyPayload, 0)); return obj; } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; default: obj = ReadString(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = (DateTime)Convert.ChangeType(obj, typeof(DateTime), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadDuration(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = TimeSpan.FromTicks(BitConverter.ToInt64(mxLegacyPayload, 0)); return obj; } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; default: obj = ReadString(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = (TimeSpan)Convert.ChangeType(obj, typeof(TimeSpan), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadGuid(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length >= 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: { string g = (string)ReadString(mxLegacyType, mxLegacyLength, mxLegacyPayload); obj = new Guid(g); return obj; } default: obj = ReadString(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = ((!(obj is string g2)) ? ((object)(Guid)Convert.ChangeType(obj, typeof(Guid), CultureInfo.CurrentCulture)) : ((object)new Guid(g2))); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadEnum(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { object obj = null; object result = null; try { switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: if (mxLegacyPayload.Length == 1) { obj = ReadBoolean(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeByte: if (mxLegacyPayload.Length == 1) { obj = ReadByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeSByte: if (mxLegacyPayload.Length >= 1) { obj = ReadSignedByte(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt16: if (mxLegacyPayload.Length == 2) { obj = ReadShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt16: if (mxLegacyPayload.Length == 2) { obj = ReadUnsignedShort(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt32: if (mxLegacyPayload.Length == 4) { obj = ReadInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt32: if (mxLegacyPayload.Length == 4) { obj = ReadUnsignedInt(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeInt64: if (mxLegacyPayload.Length == 8) { obj = ReadLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeUInt64: if (mxLegacyPayload.Length == 8) { obj = ReadUnsignedLong(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeFloat: if (mxLegacyPayload.Length == 4) { obj = ReadSingle(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDouble: if (mxLegacyPayload.Length == 8) { obj = ReadDouble(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDateTime: if (mxLegacyPayload.Length == 8) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeDuration: if (mxLegacyPayload.Length == 8) { obj = ReadDuration(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeGuid: if (mxLegacyPayload.Length == 4) { obj = ReadDateTime(mxLegacyType, mxLegacyLength, mxLegacyPayload); } break; case DataType.TypeEnum: { int num = 0; short ordinal = BitConverter.ToInt16(mxLegacyPayload, num); num += 2; int count = BitConverter.ToInt32(mxLegacyPayload, num) * 2; num += 4; obj = new CustomEnum(ordinal, Encoding.Unicode.GetString(mxLegacyPayload, num, count)); break; } default: obj = ReadString(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (obj != null) { result = (CustomEnum)Convert.ChangeType(obj, typeof(CustomEnum), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { result = obj; } catch (FormatException) { result = obj; } catch (OverflowException) { result = obj; } return result; } public static object ReadIntegerArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: if (mxLegacyPayload.Length >= 4) { int[] array2 = new int[mxLegacyLength / 4]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { array2[num2] = BitConverter.ToInt32(mxLegacyPayload, num); num += 4; num2++; } return array2; } return new int[0]; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { int[] array3 = new int[array.Length]; for (int i = 0; i < array3.Length; i++) { try { array3[i] = (int)Convert.ChangeType(array.GetValue(i), typeof(int), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array3; } return array; } public static object ReadByteArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: if (mxLegacyPayload.Length >= 1) { return mxLegacyPayload; } break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { byte[] array2 = new byte[array.Length]; for (int i = 0; i < array2.Length; i++) { try { array2[i] = (byte)Convert.ChangeType(array.GetValue(i), typeof(byte), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array2; } return array; } public static char[] ReadCharArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { ASBEnumFactory.IntToDataType(mxLegacyType); if (mxLegacyPayload.Length >= 2) { char[] array = new char[mxLegacyLength / 2]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { array[num2] = BitConverter.ToChar(mxLegacyPayload, num); num += 2; num2++; } return array; } return new char[0]; } public static object ReadShortArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: if (mxLegacyPayload.Length >= 2) { short[] array2 = new short[mxLegacyLength / 2]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { array2[num2] = BitConverter.ToInt16(mxLegacyPayload, num); num += 2; num2++; } return array2; } break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { short[] array3 = new short[array.Length]; for (int i = 0; i < array3.Length; i++) { try { array3[i] = (short)Convert.ChangeType(array.GetValue(i), typeof(short), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array3; } return array; } public static object ReadUnsignedShortArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: if (mxLegacyPayload.Length >= 2) { ushort[] array2 = new ushort[mxLegacyLength / 2]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { array2[num2] = BitConverter.ToUInt16(mxLegacyPayload, num); num += 2; num2++; } return array2; } break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { ushort[] array3 = new ushort[array.Length]; for (int i = 0; i < array3.Length; i++) { try { array3[i] = (ushort)Convert.ChangeType(array.GetValue(i), typeof(ushort), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array3; } return array; } public static object ReadUnsignedIntArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: if (mxLegacyPayload.Length >= 4) { uint[] array2 = new uint[mxLegacyLength / 4]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { array2[num2] = BitConverter.ToUInt32(mxLegacyPayload, num); num += 4; num2++; } array = array2; } break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { uint[] array3 = new uint[array.Length]; for (int i = 0; i < array3.Length; i++) { try { array3[i] = (uint)Convert.ChangeType(array.GetValue(i), typeof(uint), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array3; } return array; } public static object ReadLongArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeDuration: case DataType.TypeInt64Array: case DataType.TypeDurationArray: if (mxLegacyPayload.Length >= 8) { long[] array2 = new long[mxLegacyLength / 8]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { array2[num2] = BitConverter.ToInt64(mxLegacyPayload, num); num += 8; num2++; } return array2; } break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { long[] array3 = new long[array.Length]; for (int i = 0; i < array3.Length; i++) { try { array3[i] = (long)Convert.ChangeType(array.GetValue(i), typeof(long), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array3; } return array; } public static object ReadUnsignedLongArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: if (mxLegacyPayload.Length >= 8) { ulong[] array2 = new ulong[mxLegacyLength / 8]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { array2[num2] = BitConverter.ToUInt64(mxLegacyPayload, num); num += 8; num2++; } return array2; } break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { ulong[] array3 = new ulong[array.Length]; for (int i = 0; i < array3.Length; i++) { try { array3[i] = (ulong)Convert.ChangeType(array.GetValue(i), typeof(ulong), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array3; } return array; } public static object ReadSingleArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: if (mxLegacyPayload.Length >= 4) { float[] array2 = new float[mxLegacyLength / 4]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { array2[num2] = BitConverter.ToSingle(mxLegacyPayload, num); num += 4; num2++; } return array2; } break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { float[] array3 = new float[array.Length]; for (int i = 0; i < array3.Length; i++) { try { array3[i] = (float)Convert.ChangeType(array.GetValue(i), typeof(float), CultureInfo.CurrentCulture); if (float.IsInfinity(array3[i])) { return array; } } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array3; } return array; } public static object ReadDoubleArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: if (mxLegacyPayload.Length >= 8) { double[] array2 = new double[mxLegacyLength / 8]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { array2[num2] = BitConverter.ToDouble(mxLegacyPayload, num); num += 8; num2++; } return array2; } break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { double[] array3 = new double[array.Length]; for (int i = 0; i < array3.Length; i++) { try { array3[i] = (double)Convert.ChangeType(array.GetValue(i), typeof(double), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array3; } return array; } public static object ReadStringArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeGuid: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeGuidArray: case DataType.TypeLocalizedTextArray: { if (mxLegacyPayload.Length <= 4) { break; } Queue queue = new Queue(); uint num = 0u; int num2; for (num2 = 0; num2 < mxLegacyLength; num2 += (int)num) { num = BitConverter.ToUInt32(mxLegacyPayload, num2); if (num2 + num >= mxLegacyLength) { break; } num2 += 4; queue.Enqueue(Encoding.Unicode.GetString(mxLegacyPayload, num2, (int)num)); } return queue.ToArray(); } case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { string[] array2 = new string[array.Length]; for (int i = 0; i < array2.Length; i++) { try { array2[i] = (string)Convert.ChangeType(array.GetValue(i), typeof(string), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array2; } return array; } public static object ReadDateTimeArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: if (mxLegacyPayload.Length >= 8) { DateTime[] array2 = new DateTime[mxLegacyLength / 8]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { long fileTime = BitConverter.ToInt64(mxLegacyPayload, num); array2[num2] = DateTime.FromFileTimeUtc(fileTime); num += 8; num2++; } return array2; } break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { DateTime[] array3 = new DateTime[array.Length]; for (int i = 0; i < array3.Length; i++) { try { array3[i] = (DateTime)Convert.ChangeType(array.GetValue(i), typeof(DateTime), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array3; } return array; } public static object ReadDurationArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: if (mxLegacyPayload.Length >= 8) { TimeSpan[] array2 = new TimeSpan[mxLegacyLength / 8]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { long value = BitConverter.ToInt64(mxLegacyPayload, num); array2[num2] = TimeSpan.FromTicks(value); num += 8; num2++; } return array2; } break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { TimeSpan[] array3 = new TimeSpan[array.Length]; for (int i = 0; i < array3.Length; i++) { try { array3[i] = (TimeSpan)Convert.ChangeType(array.GetValue(i), typeof(TimeSpan), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array3; } return array; } public static object ReadGuidArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: if (mxLegacyPayload.Length > 4) { string[] array2 = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); Guid[] array3 = new Guid[array2.Length]; for (int i = 0; i < array2.Length; i++) { array3[i] = new Guid(array2[i]); } return array3; } break; } if (array != null) { Guid[] array4 = new Guid[array.Length]; for (int j = 0; j < array4.Length; j++) { try { if (array.GetValue(j).GetType() == typeof(string)) { string g = (string)array.GetValue(j); array4[j] = new Guid(g); } else { array4[j] = (Guid)Convert.ChangeType(array.GetValue(j), typeof(Guid), CultureInfo.CurrentCulture); } } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array4; } return array; } public static object ReadBooleanArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: if (mxLegacyPayload.Length >= 1) { bool[] array2 = new bool[mxLegacyLength / 1]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { array2[num2] = BitConverter.ToBoolean(mxLegacyPayload, num); num++; num2++; } return array2; } break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { bool[] array3 = new bool[array.Length]; for (int i = 0; i < array3.Length; i++) { try { array3[i] = (bool)Convert.ChangeType(array.GetValue(i), typeof(bool), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array3; } return array; } public static object ReadSignedByteArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: if (mxLegacyPayload.Length >= 1) { sbyte[] array2 = new sbyte[mxLegacyLength]; int num = 0; int num2 = 0; while (num < mxLegacyLength) { array2[num2] = (sbyte)mxLegacyPayload[num]; num++; num2++; } return array2; } break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; } if (array != null) { sbyte[] array3 = new sbyte[array.Length]; for (int i = 0; i < array3.Length; i++) { try { array3[i] = (sbyte)Convert.ChangeType(array.GetValue(i), typeof(sbyte), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array3; } return new sbyte[0]; } public static object ReadEnumArray(ushort mxLegacyType, int mxLegacyLength, byte[] mxLegacyPayload) { Array array = null; switch (ASBEnumFactory.IntToDataType(mxLegacyType)) { case DataType.TypeBool: case DataType.TypeBoolArray: array = (bool[])ReadBooleanArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDuration: case DataType.TypeDurationArray: array = (TimeSpan[])ReadDurationArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeByte: case DataType.TypeByteString: case DataType.TypeByteArray: case DataType.TypeByteStringArray: array = (byte[])ReadByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeSByte: case DataType.TypeSByteArray: array = (sbyte[])ReadSignedByteArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt16: case DataType.TypeInt16Array: array = (short[])ReadShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt16: case DataType.TypeUInt16Array: array = (ushort[])ReadUnsignedShortArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt32: case DataType.TypeInt32Array: array = (int[])ReadIntegerArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt32: case DataType.TypeUInt32Array: array = (uint[])ReadUnsignedIntArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeInt64: case DataType.TypeInt64Array: array = (long[])ReadLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeUInt64: case DataType.TypeUInt64Array: array = (ulong[])ReadUnsignedLongArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeFloat: case DataType.TypeFloatArray: array = (float[])ReadSingleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDouble: case DataType.TypeDoubleArray: array = (double[])ReadDoubleArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeString: case DataType.TypeLocalizedText: case DataType.TypeStringArray: case DataType.TypeLocalizedTextArray: array = (string[])ReadStringArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeDateTime: case DataType.TypeDateTimeArray: array = (DateTime[])ReadDateTimeArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeGuid: case DataType.TypeGuidArray: array = (Guid[])ReadGuidArray(mxLegacyType, mxLegacyLength, mxLegacyPayload); break; case DataType.TypeEnum: case DataType.TypeEnumArray: { List list = new List(); int num = 0; while (num < mxLegacyLength) { short ordinal = BitConverter.ToInt16(mxLegacyPayload, num); num += 2; int num2 = BitConverter.ToInt32(mxLegacyPayload, num) * 2; if (num + num2 >= mxLegacyPayload.Length) { break; } num += 4; CustomEnum item = new CustomEnum(ordinal, Encoding.Unicode.GetString(mxLegacyPayload, num, num2)); list.Add(item); num += num2; } array = list.ToArray(); break; } } if (array != null) { CustomEnum[] array2 = new CustomEnum[array.Length]; for (int i = 0; i < array2.Length; i++) { try { array2[i] = (CustomEnum)Convert.ChangeType(array.GetValue(i), typeof(CustomEnum), CultureInfo.CurrentCulture); } catch (InvalidCastException) { return array; } catch (FormatException) { return array; } catch (OverflowException) { return array; } } return array2; } return array; } internal static object GetValueInTargetType(DataType targetType, object retValue) { return targetType switch { DataType.TypeBool => Convert.ChangeType(retValue, typeof(bool), CultureInfo.CurrentCulture), DataType.TypeByte => Convert.ChangeType(retValue, typeof(byte), CultureInfo.CurrentCulture), DataType.TypeDateTime => Convert.ChangeType(retValue, typeof(DateTime), CultureInfo.CurrentCulture), DataType.TypeDouble => Convert.ChangeType(retValue, typeof(double), CultureInfo.CurrentCulture), DataType.TypeDuration => Convert.ChangeType(retValue, typeof(long), CultureInfo.CurrentCulture), DataType.TypeFloat => Convert.ChangeType(retValue, typeof(float), CultureInfo.CurrentCulture), DataType.TypeGuid => Convert.ChangeType(retValue, typeof(Guid), CultureInfo.CurrentCulture), DataType.TypeInt16 => Convert.ChangeType(retValue, typeof(short), CultureInfo.CurrentCulture), DataType.TypeInt32 => Convert.ChangeType(retValue, typeof(int), CultureInfo.CurrentCulture), DataType.TypeInt64 => Convert.ChangeType(retValue, typeof(long), CultureInfo.CurrentCulture), DataType.TypeSByte => Convert.ChangeType(retValue, typeof(sbyte), CultureInfo.CurrentCulture), DataType.TypeUInt16 => Convert.ChangeType(retValue, typeof(ushort), CultureInfo.CurrentCulture), DataType.TypeUInt32 => Convert.ChangeType(retValue, typeof(uint), CultureInfo.CurrentCulture), DataType.TypeUInt64 => Convert.ChangeType(retValue, typeof(ulong), CultureInfo.CurrentCulture), _ => Convert.ChangeType(retValue, typeof(string), CultureInfo.CurrentCulture), }; } private static CultureInfo ExtractLocaleInfo(ushort mxLegacyType, byte[] mxLegacyPayload) { CultureInfo result = CultureInfo.InvariantCulture; if (ASBEnumFactory.IntToDataType(mxLegacyType) == DataType.TypeLocalizedText && mxLegacyPayload.Length >= 11 && int.TryParse(Encoding.Unicode.GetString(mxLegacyPayload, 8, 8), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var result2) && result2 > 0) { result = CultureInfo.GetCultureInfo(result2); } return result; } }