The parts where C# writes the data to the file are:
accessor.Write(0, (char)de.Length);
accessor.WriteArray(0, de, 0, de.Length);
That suggests that there will be a single byte written containing the length of the string, and then the string. Maybe consider confirming this using a hex viewer, like hexdump or Perl code like the following:
perl -nE 'BEGIN{ binmode $ARGV; $/=\16;}; say map {sprintf "%02x ", or
+d $_}split //;' /path/to/file
You will want to look at open, binmode (or use that in open directly), then read to get the data, and then unpack (see its documentation in pack. Most likely, the c/a template will be what you want to read in a length-prefixed string. To make it readable, see Encode::decode to decode it from UTF-8 to printable.
Update: Added description of where the "interesting" part of writing the data happens in the C# code