public byte[] Serialize() { if (___entitystate == EntitySerialization02.EntityState.UNINITIALIZED) { Initialize(); } EntitySerialization02.EntityState oldState = OnChangeState(EntitySerialization02.EntityState.SERIALIZED); byte[][] fieldBuffer = new byte[this.___nfields][]; // Entity System fields fieldBuffer[0] = FieldSerialization02.GetFieldBuffer(this.__entitytypehash); fieldBuffer[1] = FieldSerialization02.GetFieldBuffer(this.__created); fieldBuffer[2] = FieldSerialization02.GetFieldBuffer(this.__modified); fieldBuffer[3] = FieldSerialization02.GetFieldBuffer(this.__changeindex); // Entity Data fields fieldBuffer[3] = FieldSerialization02.GetFieldBuffer(this._id); fieldBuffer[4] = FieldSerialization02.GetFieldBuffer(this._username); fieldBuffer[5] = FieldSerialization02.GetFieldBuffer(this._passphrase); int lBuffer = EntitySerialization02.NHEADERFIELDS * sizeof(byte); for (int fi = 0; fi < ___nfields; fi++) { lBuffer += fieldBuffer[fi].Length; // Entity System fields plus Entity data fields } byte[] buffer = new byte[lBuffer]; int bufferBase = 0; // Entity Header fields buffer[bufferBase++] = ___entityserializationsignature; buffer[bufferBase++] = ___entityserializationversion; buffer[bufferBase++] = ___fieldserializationversion; buffer[bufferBase++] = (byte)___entitystate; buffer[bufferBase++] = ___nfields; // Entity System fields plus Entity data fields for (int fi = 0; fi < ___nfields; fi++) { if (bufferBase + fieldBuffer[fi].Length > lBuffer) { OnChangeState(EntitySerialization02.EntityState.EXCEPTION_SERIALIZATION); return(Array.Empty <byte>()); } fieldBuffer[fi].CopyTo(buffer, bufferBase); bufferBase += fieldBuffer[fi].Length; } ___entitystate = oldState; return(buffer); }
public byte[] Serialize() { if (___entitystate == EntitySerialization02.EntityState.UNINITIALIZED) { Initialize(); } EntitySerialization02.EntityState oldState = OnChangeState(EntitySerialization02.EntityState.SERIALIZED); byte[][] fieldBuffer = new byte[this.___nfields][]; // Entity System fields fieldBuffer[0] = FieldSerialization02.GetFieldBuffer(this.__entitytypehash); fieldBuffer[1] = FieldSerialization02.GetFieldBuffer(this.__created); fieldBuffer[2] = FieldSerialization02.GetFieldBuffer(this.__modified); fieldBuffer[3] = FieldSerialization02.GetFieldBuffer(this.__changeindex); // Entity Data fields fieldBuffer[4] = FieldSerialization02.GetFieldBuffer(this._imageVersion); fieldBuffer[5] = FieldSerialization02.GetFieldBuffer(this._imageName); fieldBuffer[6] = FieldSerialization02.GetFieldBuffer(this._imageContent); // Blockchain data fields fieldBuffer[7] = FieldSerialization02.GetFieldBuffer(this.__previousentityBlockindex); fieldBuffer[8] = FieldSerialization02.GetFieldBuffer(this.__previousentityTxhash, false); // FieldEncoding.ASCIIString fieldBuffer[9] = FieldSerialization02.GetFieldBuffer(this.__previousentityContentHash); fieldBuffer[10] = FieldSerialization02.GetFieldBuffer(this.__thisentityRecentBlockIndex); fieldBuffer[11] = FieldSerialization02.GetFieldBuffer(this.__thisentityContentHash); int lBuffer = EntitySerialization02.NHEADERFIELDS * sizeof(byte); for (int fi = 0; fi < ___nfields; fi++) { lBuffer += fieldBuffer[fi].Length; // System + Entity + Blockchain data fields } byte[] buffer = new byte[lBuffer]; int fieldBufferBase = 0; // Entity Header fields buffer[fieldBufferBase++] = ___entityserializationsignature; buffer[fieldBufferBase++] = ___entityserializationversion; buffer[fieldBufferBase++] = ___fieldserializationversion; buffer[fieldBufferBase++] = (byte)___entitystate; buffer[fieldBufferBase++] = ___nfields; // System + Entity + Blockchain data fields - copy all fields except __thisentityContentHash for (int fi = 0; fi < ___nfields - 1; fi++) { if (fieldBufferBase + fieldBuffer[fi].Length > lBuffer) { OnChangeState(EntitySerialization02.EntityState.EXCEPTION_SERIALIZATION); return(Array.Empty <byte>()); } fieldBuffer[fi].CopyTo(buffer, fieldBufferBase); fieldBufferBase += fieldBuffer[fi].Length; } // Set __thisentityContentHash and encode it into the buffer using (SHA256 SHA256Factory = SHA256.Create()) { __thisentityContentHash = SHA256Factory.ComputeHash(buffer, 0, fieldBufferBase); fieldBuffer[___nfields - 1].CopyTo(buffer, fieldBufferBase); fieldBufferBase += fieldBuffer[___nfields - 1].Length; } ___entitystate = oldState; return(buffer); }