예제 #1
0
        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));
        }
예제 #2
0
        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);
        }