I use an Int32 array myself to represent Tiles in a Map. Its a pretty decent system. I use MsgPack to do my serialization. Its incredibly easy to use.
Serialize. I use a MapData struct which contains different information including the 2d array of Int32.
using (FileStream stream = new FileStream(filepath, FileMode.OpenOrCreate)) {
var serializer = SerializationContext.Default.GetSerializer<MapData>();
serializer.Pack(stream, mapData);
}
Boom. Done.
Deserialize.
using(FileStream stream = new FileStream(filepath,FileMode.Open)) {
var serializer = SerializationContext.Default.GetSerializer<MapData>();
mapData = serializer.Unpack(stream);
}
If you need/have a map editor or something you can just add the MsgPack.dll to your editor project and as long as you use the same file extensions and data type it should work with no trouble.
edit: added right code using MsgPack