【发布时间】:2014-07-30 16:45:25
【问题描述】:
我有一个特定的要求,将对象转换为字节数组,然后再转换为字符串。然后我需要从字符串恢复回字节数组,然后恢复到对象。
我能够执行除最后一步之外的每一步。我不断收到以下异常。 “对象必须实现 IConvertible。”
就数据而言,该对象实际上非常小。
这里是使用的代码:
private Object ToSafeObjectFromString(String SafeString,Type ObjectType)
{
//This line throws the exception
byte[] BufferArray = Convert.FromBase64String(SafeString);
return Convert.ChangeType(CustomByteArrayToObject(BufferArray), ObjectType);
}
public static object CustomByteArrayToObject(byte[] arrBytes)
{
MemoryStream memStream = new MemoryStream();
BinaryFormatter binForm = new BinaryFormatter();
memStream.Write(arrBytes, 0, arrBytes.Length);
memStream.Seek(0, SeekOrigin.Begin);
object obj = (object)binForm.Deserialize(memStream);
return obj;
}
private String ToSafeStringFromObject(Object Object)
{
byte[] ByteArray = ObjectToByteArray(Object);
String ReturnValue = Convert.ToBase64String(ByteArray);
return ReturnValue;
}
【问题讨论】:
-
为什么序列化使用ASCII,反序列化使用UTF8?
-
你有一些奇怪的编码用法,这可能是问题。考虑改用标准方法:对象 -> 字节 -> Base64 -> 字节 -> 对象。
-
我已将代码更改为 Convert.ToBase64。
-
你的错误是什么?仍然 OutOfMem 吗?您可以发布用于测试的代码吗?
-
什么是
ObjectToByteArray?您可以发布您的完整(相关)代码吗?
标签: c# string exception bytearray converter