public override void Read(Stream stream) { _elementType = (SerializeTypeEnum)stream.ReadByte(); var elementType = SerializeTypes.GetType(_elementType); _rank = stream.ReadInt32(); _dimensions = new int[_rank]; for (int i = 0; i < _rank; i++) { _dimensions[i] = stream.ReadInt32(); } int currDim = 0; int count = 1; var ind = new int[_rank]; for (int i = 0; i < _rank; i++) { count *= _dimensions[i]; } _values = new object[count]; for (int i = 0; i < count; i++) { ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim); _values[i] = stream.ReadPrimitiveOrStringType(elementType); } }
internal ArrayOfPrimitivesInfo(Array obj, ISerializationContext ctx) : base(obj, ctx) { _elementType = SerializeTypes.GetTypeEnum(obj.GetType().GetElementType()); _rank = obj.Rank; _dimensions = new int[_rank]; for (int i = 0; i < _rank; i++) { _dimensions[i] = obj.GetLength(i); } int[] ind = new int[_rank]; int currDim = 0; int count = 1; for (int i = 0; i < _rank; i++) { count *= _dimensions[i]; } this._values = new object[count]; for (int i = 0; i < count; i++) { ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim); _values[i] = obj.GetValue(ind); } }
public override void Read(Stream stream) { var assembly = stream.ReadString(); var name = stream.ReadString(); _arrayType = Assembly.Load(assembly).GetType(name); _rank = stream.ReadInt32(); _dimensions = new int[_rank]; int count = 1; for (int i = 0; i < _rank; i++) { _dimensions[i] = stream.ReadInt32(); count *= _dimensions[i]; } int currDim = 0; var ind = new int[_rank]; _elementsInfo = new List <ISerializeInstanceInfo>(); for (int i = 0; i < count; i++) { ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim); var info = this.Context.GetUninitializedTypeInfo((SerializeTypeEnum)stream.ReadByte()); info.Read(stream); _elementsInfo.Add(info); } }
public override object Get(List <ISerializeInstanceInfo> instanceInfos) { var arr = Array.CreateInstance(SerializeTypes.GetType(_elementType), _dimensions); this.Instance = arr; int count = 1; var ind = new int[_rank]; for (int i = 0; i < _rank; i++) { count *= _dimensions[i]; } int currDim = 0; for (int i = 0; i < count; i++) { ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim); arr.SetValue(_values[i], ind); } return(arr); }
public override object Get(List <ISerializeInstanceInfo> instanceInfos) { var objType = Assembly.Load(_arrayType.Assembly.FullName).GetType(_arrayType.FullName); var arr = Array.CreateInstance(objType, _dimensions); this.Instance = arr; int currDim = 0; int count = 1; var ind = new int[_rank]; for (int i = 0; i < _rank; i++) { count *= _dimensions[i]; } for (int i = 0; i < count; i++) { ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim); arr.SetValue(_elementsInfo[i].Get(instanceInfos), ind); } return(arr); }
internal ArrayOfByRefInfo(Array obj, ISerializationContext ctx) : base(obj, ctx) { _rank = obj.Rank; _arrayType = obj.GetType().GetElementType(); _dimensions = new int[_rank]; for (int i = 0; i < _rank; i++) { _dimensions[i] = obj.GetLength(i); } int[] ind = new int[_rank]; int currDim = 0; int count = obj.Length; _elementsInfo = new List <ISerializeInstanceInfo>(); for (int i = 0; i < count; i++) { ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim); _elementsInfo.Add(ctx.GetInstanceInfo(obj.GetValue(ind))); } }