/// <summary> /// 获取ElementDataType对应的C#中的数据类型 /// </summary> /// <param name="element">节点元素</param> /// <returns>ElementDataType对应的C#中的数据类型</returns> public static Type GetType(ElementDataType dataType) { switch (dataType) { case ElementDataType.String: case ElementDataType.Text: return(typeof(string)); case ElementDataType.Boolean: case ElementDataType.Integer: return(typeof(int)); case ElementDataType.Decimal: return(typeof(decimal)); case ElementDataType.Date: case ElementDataType.DateTime: return(typeof(DateTime)); case ElementDataType.Binary: return(typeof(byte[])); default: throw new NotSupportedException(dataType.ToString()); } }
public ElementAttribute(ElementDataType dataType, int length, int precision = 0, object defaultValue = null, string displayName = "") { this.DataType = dataType; this.Length = length; this.Precision = precision; this.DefaultValue = defaultValue; this.DisplayName = displayName; }
private object[] ReadArrayOfNullableElements(IDeserializer Reader, ulong NrElements) { List <object> Elements = new List <object>(); uint ElementDataType; while (NrElements-- > 0) { ElementDataType = Reader.ReadBits(6); switch (ElementDataType) { case ObjectSerializer.TYPE_BOOLEAN: Elements.Add(Reader.ReadBoolean()); break; case ObjectSerializer.TYPE_BYTE: Elements.Add(Reader.ReadByte()); break; case ObjectSerializer.TYPE_INT16: Elements.Add(Reader.ReadInt16()); break; case ObjectSerializer.TYPE_INT32: Elements.Add(Reader.ReadInt32()); break; case ObjectSerializer.TYPE_INT64: Elements.Add(Reader.ReadInt64()); break; case ObjectSerializer.TYPE_SBYTE: Elements.Add(Reader.ReadSByte()); break; case ObjectSerializer.TYPE_UINT16: Elements.Add(Reader.ReadUInt16()); break; case ObjectSerializer.TYPE_UINT32: Elements.Add(Reader.ReadUInt32()); break; case ObjectSerializer.TYPE_UINT64: Elements.Add(Reader.ReadUInt64()); break; case ObjectSerializer.TYPE_DECIMAL: Elements.Add(Reader.ReadDecimal()); break; case ObjectSerializer.TYPE_DOUBLE: Elements.Add(Reader.ReadDouble()); break; case ObjectSerializer.TYPE_SINGLE: Elements.Add(Reader.ReadSingle()); break; case ObjectSerializer.TYPE_DATETIME: Elements.Add(Reader.ReadDateTime()); break; case ObjectSerializer.TYPE_DATETIMEOFFSET: Elements.Add(Reader.ReadDateTimeOffset()); break; case ObjectSerializer.TYPE_TIMESPAN: Elements.Add(Reader.ReadTimeSpan()); break; case ObjectSerializer.TYPE_CHAR: Elements.Add(Reader.ReadChar()); break; case ObjectSerializer.TYPE_STRING: case ObjectSerializer.TYPE_ENUM: Elements.Add(Reader.ReadString()); break; case ObjectSerializer.TYPE_CI_STRING: Elements.Add(new CaseInsensitiveString(Reader.ReadString())); break; case ObjectSerializer.TYPE_BYTEARRAY: Elements.Add(Reader.ReadByteArray()); break; case ObjectSerializer.TYPE_GUID: Elements.Add(Reader.ReadGuid()); break; case ObjectSerializer.TYPE_ARRAY: Elements.Add(this.ReadGenericArray(Reader)); break; case ObjectSerializer.TYPE_OBJECT: Elements.Add(this.Deserialize(Reader, ElementDataType, true)); break; case ObjectSerializer.TYPE_NULL: Elements.Add(null); break; default: throw new Exception("Unrecognized data type: " + ElementDataType.ToString()); } } return(Elements.ToArray()); }
/// <summary> /// Initializing from stream by encoded <see cref="DataTypes"/>. /// </summary> internal DataTypeDescriptor(DataTypeDescriptor parentDescriptor, DataTypes dataType, BinaryReader reader) { ParentDescriptor = parentDescriptor; this.dataType = dataType; if (ElementDataType == DataTypes.GenericTypeDefinition) { return; } // recursion 1: Element type in collections, pointers and ByRef types // (In case of simple collections ElementDescriptor will be created on decode) if (CollectionDataType != DataTypes.Null && ElementDataType == DataTypes.Null || ElementDataType.In(DataTypes.Pointer, DataTypes.ByRef)) { ElementDescriptor = new DataTypeDescriptor(this, ReadDataType(reader), reader); } // recursion 2: TValue in dictionaries if (IsDictionary) { ValueDescriptor = new DataTypeDescriptor(this, ReadDataType(reader), reader); } }