/// <exception cref="System.IO.IOException" /> private IFieldDefinition SetPosition(string fieldName, FieldType fieldType) { if (_raw) { throw new SerializationException( "Cannot write Portable fields after getRawDataOutput() is called!"); } var fd = _cd.GetField(fieldName); if (fd == null) { throw new SerializationException("Invalid field name: '" + fieldName + "' for ClassDefinition {id: " + _cd.ClassId + ", version: " + _cd.Version + "}"); } if (_writtenFields.Add(fieldName)) { var pos = _out.Position; var index = fd.Index; _out.Write(_offset + index * BytesExtensions.SizeOfInt, pos); _out.Write((short)fieldName.Length); _out.WriteAsBytes(fieldName); _out.Write((byte)fieldType); } else { throw new SerializationException("Field '" + fieldName + "' has already been written!"); } return(fd); }