我正在使用Xamarin开发一个iOS项目,它使用C#进行.NET(SOAP)Web服务和iOS。我试图以字节数组的形式从Web服务发送DataSet对象到移动设备。我使用following代码转换为/从字节数组:
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;
}
然而,当我尝试将字节数组转换回从WebService发送到移动设备的DataSet时,我得到了一个异常'意外的二进制元素:101'来自' Deserialize'方法。我尝试了以下但仍然无法弄清楚:
任何人都有通过SOAP Web服务发送byte []的任何线索或经验吗?
提前致谢!
答案 0 :(得分:0)
我设法使用另一个序列化函数找到了解决方法,如下所示:
private byte[] Compress(DataSet dataset)
{
Byte[] data;
MemoryStream mem = new MemoryStream();
GZipStream zip = new GZipStream(mem, CompressionMode.Compress);
dataset.WriteXml(zip, XmlWriteMode.WriteSchema);
zip.Close();
data = mem.ToArray();
mem.Close();
return data;
}
private DataSet Decompress(Byte[] data)
{
MemoryStream mem = new MemoryStream(data);
GZipStream zip = new GZipStream(mem, CompressionMode.Decompress);
DataSet dataset = new DataSet();
dataset.ReadXml(zip, XmlReadMode.ReadSchema);
zip.Close();
mem.Close();
return dataset;
}
归功于此post