0
我正在开发一个使用Xamarin的iOS项目,它使用C#.NET(SOAP)Web服务和iOS。我试图从Web服务发送DataSet对象到字节数组形式的移动。我用following代码转换到/从字节数组:将C#字节数组转换为对象抛出SerializationException
public static byte[] ConvertObjectToByteArray(Object obj)
{
if (obj == null)
return null;
BinaryFormatter bf = new BinaryFormatter();
if (obj.GetType() == typeof(DataSet))
{
DataSet ds = (DataSet)obj;
ds.RemotingFormat = SerializationFormat.Binary;
}
using (MemoryStream ms = new MemoryStream())
{
bf.Serialize(ms, obj);
return ms.ToArray();
}
}
public static Object ConvertByteArrayToObject(byte[] byteArr)
{
Object resultObj;
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream(byteArr))
{
ms.Seek(0, SeekOrigin.Begin);
resultObj = (Object) bf.Deserialize(ms);
ms.Close();
}
return resultObj;
}
然而,当我尝试字节数组转换回从web服务发送到移动数据集,我有个例外“意外二进制元素:101”从'反序列化'方法。我尝试以下,但仍无法弄清楚:
- 转换数据集为byte []和转换回数据集的WebService,它工作正常
- 转换数据集为byte []和转换回数据集移动,它工作正常
- 我调试并检查字节数组的长度和前几个字节是相同的,当从WebService发送和移动时收到。
任何人都有任何线索或经由SOAP Web服务发送byte []的经验?
在此先感谢!
这可能发生,因为这两个可能会把手(反)序列略有不同。或者仅仅是因为其中一个有bug(假设这里是Mono)。无论如何,尝试使用非二进制序列化来开始看看会发生什么。您仍然可以将XML文本转换为二进制文件。 – 2014-10-08 07:22:35