我认为我已经遇到过这种需求十几次了。但我从来没有找到令人满意的解决方案。例如,我有一组字符串,我想通过一个只允许纯字符串的通道(如磁盘或网络)进行序列化。
我几乎总是使用“split”和“join”,并使用类似于“:::==--==:::”这样荒谬的分隔符。
public static string encode(System.Collections.Generic.List<string> data)
{
return string.Join(" :::==--==::: ", data.ToArray());
}
public static string[] decode(string encoded)
{
return encoded.Split(new string[] { " :::==--==::: " }, StringSplitOptions.None);
}
但是这个简单的解决方案显然有一些缺陷。该字符串不能包含分隔符字符串。因此,编码后的字符串无法再次重新编码。
据我所知,全面的解决方案应该涉及在编码时转义分隔符,在解码时取消转义。虽然问题听起来很简单,但我相信完整的解决方案可能需要大量的代码。我想知道是否有任何技巧可以让我用非常少的代码构建编码器和解码器?