馬驥,字龍媒,是商人的兒子。他風度翩翩,一表人材,從小就灑脫大方,喜歡唱歌跳舞。經常跟著戲班子演出,用錦帕纏著頭,就像一個美麗的少女,因此又有「俊人」的美稱。他十四歲考中秀才,很有名氣。父親年老體衰,放棄了經商,回家閒住,對馬驥說:「幾卷書,餓了不能煮著吃,冷了不能當衣穿,我兒應該繼承父業去經商。」馬驥從此就慢慢做起買賣來。
一次,馬驥跟別人去海外經商,被颶風刮走了。漂了幾天幾夜,來到一個都市。這裡的人個個都非常醜陋,看見馬驥來,以為是妖怪,都驚叫著逃走了。馬驥剛見到這情景時,還很害怕;等知道那些人是懼怕自己時,就反而去欺負他們。遇到吃飯的,他就跑過去,人家嚇跑了,他就把剩餘的飯菜吃掉。這樣過了很久,進入一個山村。山村中的人相貌也有像人的,但是都破衣爛衫,像討飯的。馬驥在樹下休息,村裡人都不敢過來,只是遠遠地看著他。時間長了,覺出馬驥並不是吃人的妖怪,才開始慢慢接近他。馬驥笑著同他們攀談,他們的語言雖然不同,但大半能聽懂。馬驥就告訴他們自己的來歷。村裡人很高興,遍告鄉鄰:來客不吃人。但是那些長得醜陋的,看看他就跑了,始終不敢到跟前來。那些來的人,五官的位置都與中國人大體相同。他們擺上酒菜共同招待馬驥。馬驥問他們怕他的原因,回答說:「曾經聽祖父說;往西走二萬六千里,有個中國。那裡的人形象都很詭秘奇異。原來只是聽說過,現在才相信了。」問他們為什麼這樣窮,村人回答說:「我國所看重的不在學問才能,而在相貌。長得最美的做大官,稍差一點的做小官,再差一點的也能受到貴人的寵愛,得到賞賜的食物,養活妻兒。像我們這樣的,剛出生時,父母就以為不吉利,常常都被拋棄了。父母不忍心丟棄的,也都是為了傳宗接代罷了。」馬驥問:「這叫什麼國?」回答說:「叫大羅剎國,往北三十里是都城。」馬驥請他們領著到都城看看。於是,第二天雞一叫村人就起身,領馬驥一塊去了。
天亮後,才到達都城。都城的城牆是用黑石頭砌的,顏色像墨一樣黑。樓閣高近百尺,但很少用瓦,都用紅色石頭蓋頂。抬一塊碎石在指甲上磨磨,和紅色的硃砂沒有兩樣。這時正好退朝,朝中有一頂大轎子出來,村人指著說:「這是宰相。」馬驥一看,那人兩隻耳朵朝後長著,三個鼻孔,睫毛像簾子一樣蓋住了眼睛。又出來幾個騎馬的,村人說:「這是大夫。」挨著指出各人的官職,大都是披頭散髮、相貌猙獰的醜八怪。官職越低的,丑相也漸減。一會兒,馬驥往回走,街市上的人看見他,嚇得大聲嚷叫著,跌跌撞撞地跑了,就像碰上了怪物。村人再三說明,街市上的人才敢遠遠地站著看。
回去以後,羅剎國裡老老小小都知道了山村有一個奇怪的人。於是大小官員都想見識見識,就叫村裡的人把馬驥送去。可是每到一家,看門人總是把門關死,男女老少偷偷地從門縫裡往外瞅著議論著。整整一天,沒有一個敢開門讓馬驥進去的。村人說:「這裡有一個執戟郎,曾為先王出使外國。他見得多,可能不會害怕你。」領著馬驥去登門拜訪。那位執戟郎果然很高興,把馬驥奉為上賓。馬驥看他的相貌,像有八九十歲,眼睛突出,鬍鬚捲曲得像刺蝟。執戟郎說:「我年輕時,曾奉國王的命令,出使過許多國家,唯獨沒有去過中國。如今我一百二十多歲了,能有幸看到上國的人物,這可不能不報告天子。但是我已經退職,十多年不去朝廷了。明天早上,就為你去一趟。」說完,備了酒菜,招待馬驥。酒過數巡,出來十多名歌女,輪流歌舞。都長得像夜又樣,全用白錦纏著頭,紅色的衣服拖在地上。不知扮的什麼角色,唱的什麼歌詞,腔調節奏都很特別。主人看著很滿意,問:「中國也有這樣好的歌舞嗎?」馬驥說:「有。」主人請馬驥模仿幾句。馬驥就用手敲著桌子唱了一曲,主人高興地說:「真妙啊!你的歌聲就像鳳鳴龍嘯,我從沒聽到過。」
第二天,執戟郎上朝,把馬驥推薦給國王。國王高興地要下詔書召見。有兩三個大夫說,馬驥樣子怪異,怕驚嚇了皇上龍體,國王才沒有召見他。執戟郎出來告訴馬驥,深表惋惜。馬驥和他一同居住了好多天,同主人一起飲酒,喝醉了,拔劍起舞,用煤粉抹在臉上扮成張飛。主人認為很美,說:「請你扮成張飛去見宰相,宰相一定樂意用你,高官厚祿不難到手。」馬驥說:「嘻,鬧著玩玩還行,怎麼能換個假臉去謀取榮華富貴呢?」主人再三強求,馬驥才應了。主人馬上備了酒筵,請那些大官們來喝酒,叫馬驥畫了臉等著。不久客人來了,主人喊馬驥出來見客。客人驚訝地說:「奇怪,怎麼前幾天那樣醜陋,今天又這樣漂亮!」於是就同馬驥一起喝酒,非常快活。馬驥跳著舞,唱了一首「弋陽曲」,滿座的客人無不傾倒。
第二天,大官們紛紛上奏國王,推薦馬驥。國王高興,派使者持旌節以禮召見他。見面後,國王問馬驥中國治國安邦的辦法,馬驥原原本本地陳述了一番。國王大加讚賞,在別宮賜宴款待。喝到暢快的時候,國王說:「聽說你善唱優雅的樂曲,能不能叫寡人欣賞欣賞?」馬驥便起身舞起來,也倣傚羅剎舞女的樣子用白錦纏頭,唱些靡靡之音。國王高興極了,當天就封他為下大夫。並經常請馬驥參加家宴,特別恩寵他。時間長了,那些官僚們都知道了馬驥的面目是假的。他無論走到哪裡,總是看見人們小聲耳語,不願意同他接近。馬驥感到很孤立,心裡很不安,就上書國王要求辭職,國王不准。他又要求休假,國王便給了他三個月的假期。於是馬驥坐官車載著金寶又回到了山村。村人跪在路上迎接他,馬驥把金錢分給過去與他結交的那些朋友,村裡歡聲雷動。村人說:「我們這些小人受到大夫的恩賜,明天去海市,尋求些珍貴玩物,來報答大夫。」馬驥問:「海市在什麼地方?」村人說:「海市是四海蛟人聚集在那裡賣珠寶的地方。到時四方十二國,都去做買賣。集市中還有許多神人來遊玩。雲霞遮天,波濤洶湧。那些貴人們都珍惜自己,不敢去冒險,只是把銀錢交給我們,替他們買奇珍異寶。現在離海市的日子不遠了。」馬驥問他們怎麼知道日期,村人說:「如果看見海上有紅色的鳥飛來飛去,七天以後就是海市。」馬驥問他們動身的日期,想一起去看看。村人勸他自己珍重。馬驥說:「我本來就是海上客,還怕什麼風濤浪湧。」
不幾天,果然有人登門送錢托他們買東西。馬驥就和村人把錢裝上船,一起去了。船能容幾十個人,船底是平的,欄杆高高的,有十個人搖櫓,船像飛箭一樣行進。走了三天,遠遠看見水雲蕩漾之中,樓閣層層疊疊,各處來做買賣的船,像螞蟻一樣紛紛聚集。不多會兒,來到城下,見牆上的磚,都和人一樣長,城樓高得接天。他們繫好船進城,見集市上擺放的貨物,全是奇珍異寶,光彩奪目,都是人世間沒有的。有一位少年騎著駿馬走過來,集市上的人都急忙躲開,說是「東洋三世子」來了。世子過來,看見馬驥,說:「這不是偏遠小國來的人。」接著就有個在馬前開路的人問馬驥鄉籍是哪裡,馬驥站在路旁行了禮,詳細講了自己的籍貫和姓氏。世子高興地說:「你既然能屈尊來到這裡,說明我們的緣分不淺。」於是就給他一匹馬,請他同行。
二人出了西城,剛走到岸邊,騎的馬嘶叫著躍進水中,馬驥嚇得失聲喊叫。卻見海水從中間分開,兩邊的水像牆壁一樣屹立著。一會兒,看見一座宮殿,玳瑁裝飾的梁,魚鱗片做的瓦,四壁亮如水晶,奪目耀眼,能照出人影。馬驥下馬,世子拱手將他請入,抬頭看見龍王坐在殿上。世子啟奏道:「臣遊覽海市,遇見這位中華賢士,領他來參見大王。」馬驥上前跪拜行禮。龍王說:「先生既然是位有文才的學士,一定能夠勝過屈原、宋玉。我想煩勞你的大手筆,寫一篇描寫海市的文章,希望你不要吝惜你的妙詞。」馬驥叩頭答應了。龍王給他一方水晶硯台,一枝龍鬚筆,光滑如雪的紙張,香氣如蘭的墨。馬驥立時寫出了篇千餘言的文章,呈獻給龍王。龍王讚賞說:「先生真是高才,給水國添了光彩!」接著召集龍族,在采霞宮舉行盛宴。酒過幾巡,龍王舉杯向馬驥說:「寡人有個愛女,還沒有許配人家,願意把她許給先生,先生意思如何?」馬驥忙離席站起,慚愧地表示感激,連連答應。龍王便對左右說了。不一會兒,有幾個宮女扶著一個女郎出來,佩環聲聲,鼓樂齊奏。拜完天地,馬驥偷眼一看,那女郎真是一位天仙。龍女拜完天地就走了。不多會,宴席散了,兩個丫鬟挑著宮燈,領著馬驥進了旁宮。龍女正濃妝坐等。珊瑚做的床上,裝飾著各種珠寶;帳外流蘇,綴著斗大的明珠;床上的被褥又香又軟。天剛亮,便有許多年輕美貌的丫鬟使女前來侍候。馬驥起床後,上朝拜謝。龍王封他為駙馬都尉,並把他寫的《海市賦》傳送四海龍宮。四海龍王都派專員來祝賀,爭著下請柬請駙馬赴宴。馬驥身穿錦繡衣衫,坐著青龍拉的車子,前呼後擁,外出赴宴。幾十名騎馬的武士都身佩雕弓,扛著白色的棍杖,威風凜凜。騎馬的彈箏,坐車的奏玉,三天裡,遊遍各海。從此「龍媒」的名字,傳遍四海。
龍宮裡有一棵玉樹,一人多粗,樹幹晶瑩透澈,像白琉璃;中間有一淡黃色的心。比胳膊稍細一點;葉子類似碧玉,有銅錢那麼厚;樹蔭細碎濃密。馬驥常同龍女在樹下吟詩唱歌。樹上開的花形狀類似枙子花,花瓣落在地上,發出鏘的一聲。拾起來看看,像用紅色瑪瑙雕成的,光明可愛。常有一種奇異的鳥兒飛來啼叫,金綠色的羽毛,尾巴比身體還長,叫聲像玉笛奏出的哀婉樂曲,使人憂傷。馬驥一聽這鳥的叫聲就思念家鄉,對龍女說:「我流浪在外三年了,遠離父母,每當想起他們,便傷心流淚。你能跟我回家鄉嗎?」龍女說:「仙境同塵世隔絕,不能跟隨你去。我也不忍心以夫妻之愛,奪走你父子之情。容我慢慢想個辦法。」馬驥聽了,忍不住又流下眼淚。龍女也歎息說:「這實在是不能兩全齊美的事啊!」
第二天,馬驥從外邊回來,龍王說:「聽說駙馬思念故鄉,明天早晨收拾行裝送你上路,可以嗎?」馬驥連忙拜謝說:「我一個孤身旅居在外的臣子,受到過分的優待寵愛,感恩圖報之情,牢記在心中。容許我暫時回家探望一下父母,以後還要回來團聚。」到了晚上,龍女擺酒話別。馬驥同她約好以後見面的日子,龍女說:「我們的情緣已經到頭了。」馬驥非常悲痛。龍女說:「回家奉養雙親,可見你有孝心。人生聚散,百年如同旦夕,何必像多情兒女般哭泣?今後我一定為你堅守貞節,你也要為我不再另娶,兩地同心,就是美滿夫妻。何必一定要早晚守在一起,才叫白頭偕老呢?要是違背了盟誓,再婚嫁也不會吉利。如果顧慮無人主持家務,你可以收一個婢女為妾。還有一件事要囑咐你,成親後,我好像懷孕了,請給孩子取個名。」馬驥說:「如果是女的,就叫龍宮,男的就叫福海。」龍女要一件東西作憑證,馬驥把在羅剎國得到的一對赤玉蓮花拿出來給她。龍女說:「三年後的四月八日,你要划船去南島,那時送還你的兒女。」龍女用魚皮做了個口袋,裝滿珠寶,送給馬驥說:「你好好珍藏,幾輩子也吃不完用不盡。」天剛放亮,龍王設宴餞別,贈送馬驥許多禮物。馬驥拜別出了龍宮,龍女乘白羊車送他到海邊。馬驥上岸下了馬,龍女說聲「珍重」,掉轉車頭回去了。不一會,就走遠了,海水又合到一塊,再也看不見了。馬驥便往回走來。
自從馬驥被海水漂走,人們都以為他已經死了。他一到家,家裡人無不驚疑。幸虧父母都健在,只有妻子已經改嫁了。馬驥這才明白龍女「守義」的話,原來已經先知道自己的妻子改嫁了。父親想為馬驥再娶一房妻子,馬驥不答應,只收了一個婢女做妾。他牢記龍女叮囑的三年期限。到日子後乘船來到島中,看見兩個小孩坐浮在水面上,拍打著水嬉笑,不動也不下沉。馬驥到跟前用手一拉,一個小孩笑著抓住馬驥的手臂,跳入他懷裡;另一個大聲哭起來,似乎怪馬驥不拉自己,馬驥就把他也拉上來。仔細看去,一男一女,相貌都很俊秀。頭上的花帽子各點綴著一塊玉,便是那赤玉蓮花。背上有個錦囊,拆開一看,裡邊有一封書信,上寫:「公婆想必都安康吧!轉眼已過三年,紅塵永遠隔離了我們,盈盈一帶之水,書信難通。朝思暮想,只有夢中才能相見;殷切地盼望,盼得脖子發酸。面對茫茫大海,有恨又有什麼辦法呢?又想奔月的嫦娥,尚且獨守月宮;投梭的織女,也在天河一邊惆悵。我是什麼人,哪能永遠和愛人相聚?每每想到這裡,便又破涕為笑。我們分別兩個月後,竟生了一對兒女。如今已經在懷抱中咿呀學語,能懂笑語,摸棗抓梨,沒有母親也可以活下去了。現在把他們送還給你。你贈送的赤玉蓮花,裝飾在孩子們的帽子上作為憑證。你把孩子抱在膝頭時,就像我在你身邊一樣。知道你履行了過去的盟誓,心裡很安慰。我這一生不會有二心,到死不會再嫁別人。梳妝匣裡不再放蘭膏;對鏡梳妝,久已不塗抹脂粉。你就好比久出遠門的遊子,我就是遊子之婦,雖然遠隔兩地,但我們仍是恩愛夫妻。只是想公婆雖然已經抱上孫子,卻從沒見過兒媳,按情理說,也是個缺陷。一年後婆婆安葬時,我一定親臨墓穴,盡兒媳孝道。從此以後,則『龍宮』平安,還有見面之期;『福海』長壽,或許還能來往。希望你多多珍重,想要說的話是說不完的。」馬驥反覆讀著書信,淚流不止。兩個孩子抱著他的脖子說:「回家吧。」馬驥更加悲痛,撫摸著他們說:「我兒知道家在什麼地方?」孩子更加哭鬧,伊伊呀呀地喊著要回家。馬驥望著茫茫大海,無邊無際,看不見龍女的影子;波浪翻騰,沒有去龍宮的道路。只好抱著孩子掉轉船頭,滿腹惆悵地回去了。
馬驥知道母親的壽命不長了,把衣服棺木都準備好了,在墓地上種植了一百多棵松樹。過了一年,母親果然死了。靈車剛到墓地,就有一個穿孝服的女子走近墓穴哭吊。眾人正吃驚地看她時,忽然風激雷轟,接著下起了急雨,轉眼間那女子已經不見了。新種的松樹本來大都枯萎了,這時又全活了。福海稍長大一點,常常思念母親,忽然自己投入大海,幾天後才回來。龍宮因為是女孩不能去,常常關上門獨自哭泣。一天,大白天忽然烏雲遮天,龍女走進房內,勸女兒說:「兒自己能長大成家,為什麼哭泣?」說著賜她一棵八尺高的珊瑚樹,一帖龍腦香,一百顆明珠,一對八寶嵌金盒子,作為嫁妝。馬驥聽說龍女來了,急忙跑進來,拉著手就哭。頃刻間,一聲疾雷震破房頂,龍女已經不見了。