Я разрабатываю проект iOS с использованием Xamarin, который использует C# для веб-службы .NET (SOAP) и iOS. Я пытаюсь отправить объект DataSet из веб-службы на мобильный в виде массива байтов. Я использовал following код для преобразования в/из байтового массива:Преобразование C# Байт-массив в объект Threw 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;
}
Однако, когда я пытаюсь преобразовать массив байтов обратно в DataSet, посылаемого с WebService на мобильный, я получил исключение «Неожиданный двоичный элемент: 101» из метод «Deserialize». Я попытался следующие, но все еще не мог понять:
- Преобразование DataSet в байт [] и преобразовать обратно в DataSet в WebService, он работает правильно
- Преобразование DataSet в байт [] и преобразовать обратно в DataSet в мобильный, он работает правильно
- Я отлаживал и проверял, что длина байтового массива и первые несколько байтов совпадают, когда они будут отправлены из WebService и получены на мобильном устройстве.
У кого-нибудь есть какие-либо подсказки или опыт отправки байта [] через SOAP-веб-сервис?
Заранее благодарен!
Это могло произойти потому, что два может обрабатывать (де) сериализации немного по-другому. или просто потому, что один из них имеет ошибку (предполагая здесь Mono). Во всяком случае, попробуйте пойти с не двоичной сериализацией, чтобы начать видеть, что происходит. Вы все равно можете преобразовать XML-текст в двоичный. –