private void XmlFieldValue(byte[] data) { object value = null; SuggestedType type = BlobUtil.GetSuggestedType(data); switch (type) { case SuggestedType.StringType: value = BlobUtil.TrimNull(Encoding.ASCII.GetString(data)); break; case SuggestedType.Int8Type: value = data[0]; break; case SuggestedType.Int16Type: value = BitConverter.ToInt16(data, 0); break; case SuggestedType.Int32Type: value = BitConverter.ToInt32(data, 0); break; case SuggestedType.Int64Type: value = BitConverter.ToInt64(data, 0); break; default: value = Convert.ToBase64String(data); break; } xmlOut.WriteAttributeString("type", Convert.ToString(type)); xmlOut.WriteString(Convert.ToString(value)); }
private static object GetDataForProp(byte[] buffer, Type propType) { object data = null; object integerData = null; Type enumType = null; // pull out integer data before parsing it, not always the # of bytes we want switch (buffer.Length) { case 1: integerData = buffer[0]; break; case 2: integerData = BitConverter.ToInt16(buffer, 0); break; case 4: integerData = BitConverter.ToInt32(buffer, 0); break; case 8: integerData = BitConverter.ToInt64(buffer, 0); break; } if (propType.IsEnum) { enumType = propType; propType = Enum.GetUnderlyingType(propType); } if (propType == typeof(uint)) { data = Convert.ToUInt32(integerData); } else if (propType == typeof(int)) { data = Convert.ToInt32(integerData); } else if (propType == typeof(ushort)) { data = Convert.ToUInt16(integerData); } else if (propType == typeof(short)) { data = Convert.ToInt16(integerData); } else if (propType == typeof(string)) { data = BlobUtil.TrimNull(Encoding.ASCII.GetString(buffer)); } else if (propType == typeof(bool)) { data = Convert.ToBoolean(integerData); } else if (propType == typeof(byte)) { data = Convert.ToByte(integerData); } else if (propType == typeof(byte[])) { data = buffer; } else if (propType == typeof(ulong)) { data = Convert.ToUInt64(integerData); } else if (propType == typeof(long)) { data = Convert.ToInt64(integerData); } else if (propType == typeof(MicroTime)) { data = new MicroTime(Convert.ToUInt64(integerData)); } else { throw new NotImplementedException("Missing handler in GetDataForProp of type " + propType.ToString()); } if (enumType != null) { data = Enum.ToObject(enumType, data); } return(data); }