powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Десериализовать класс
15 сообщений из 15, страница 1 из 1
Десериализовать класс
    #38698016
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во вложении сохраненный потом в виде byte[]. Этот Stream приходит из android приложения.
Это класс на стороне клиента андройд приложения:
Код: java
1.
2.
3.
4.
5.
	public static class UploadFile implements Serializable {
		private static final long serialVersionUID = 1L;
		public String fileName;
		public byte[] content;
	}



Это класс на стороне сервера WCF:
Код: c#
1.
2.
3.
4.
5.
public class UploadFile
    {
        public string fileName;
        public byte[] content;
    }



Десериализовать пытаюсь так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public static object ByteArrayToObject(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;
        }



На этой строчке binForm.Deserialize(memStream) получаю такую ошибку:

Недопустимый двоичный формат входного потока. Начало содержимого (в байтах): AC-ED-00-05-73-72-00-20-63-6F-6D-2E-69-74-73-72-62 ...


В какую сторону копать, в чем может быть проблема?
...
Рейтинг: 0 / 0
Десериализовать класс
    #38698034
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл написать, что content это jpg
...
Рейтинг: 0 / 0
Десериализовать класс
    #38698049
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavluha,

андроид понятия не имеет что такое "BinaryFormatter"

как в прочем и BinaryFormatter об андроиде
...
Рейтинг: 0 / 0
Десериализовать класс
    #38698050
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил,

А есть какие-нибудь варианты подружить их?
...
Рейтинг: 0 / 0
Десериализовать класс
    #38698112
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Protocol Buffers или закат солнца вручную.
...
Рейтинг: 0 / 0
Десериализовать класс
    #38698208
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PavluhaИзопропил,

А есть какие-нибудь варианты подружить их?

wcf + json
...
Рейтинг: 0 / 0
Десериализовать класс
    #38698214
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Base64
...
Рейтинг: 0 / 0
Десериализовать класс
    #38698486
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свеном задачу решает, брызгая слюной

при желании можно извлечь данные из Java Object Stream
описание - в оракловых доках
...
Рейтинг: 0 / 0
Десериализовать класс
    #38698584
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey TSV,

Закатывается класс в json очень долго, много данных. Картинки по 1 метру где-то будут отправляться.
Использую Gson библиотеку



skyANABase64

А тут как не понял?
...
Рейтинг: 0 / 0
Десериализовать класс
    #38698647
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavluhaskyANABase64А тут как не понял?Ну как...

Image to Base64 string и на сервер.
...
Рейтинг: 0 / 0
Десериализовать класс
    #38698651
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Десериализовать класс
    #38698652
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavluha,
На стороне андроида как сериализуется?
...
Рейтинг: 0 / 0
Десериализовать класс
    #38698656
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант, можно отправлять просто по HTTP, там и длина и имя и кодировка и собственно сам контент.
...
Рейтинг: 0 / 0
Десериализовать класс
    #38699291
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВ,

Просто потоком швыряется сейчас.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
                        File f = new File(fileName);
			FileInputStream fileInputStream = new FileInputStream(f);
			InputStreamEntity reqEntity = new InputStreamEntity(fileInputStream, f.length());
			reqEntity.setContentType("binary/octet-stream");
			reqEntity.setChunked(true);

			HttpPost post = new HttpPost(new URI(url));
			post.addHeader("Authorization", "Basic " + _auth);
			post.setEntity(reqEntity);



Было так, не работало:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
                        UploadFile save = new UploadFile();
			save.fileName = number;
			byte[] data = new byte[(int) f.length()];
			try {
				new FileInputStream(f).read(data);
				save.content = data;
			} catch (Exception e) {
				e.printStackTrace();
			}

			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(baos);
			oos.writeObject(save);
			oos.flush();
			oos.close();
			InputStream is = new ByteArrayInputStream(baos.toByteArray());
			InputStreamEntity reqEntity = new InputStreamEntity(is, -1);
			reqEntity.setContentType("binary/octet-stream");
			reqEntity.setChunked(true);
...
Рейтинг: 0 / 0
Десериализовать класс
    #38700030
Фотография Bator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сервере json распарсил, получил из нужного поля строку в Base64 и вот
Код: c#
1.
byte[] filebytes = Convert.FromBase64String(aData);


Вот пример сразу писать в/из файлов этот Base64
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public static string FileToBase64(string FileName)
{
    string encodedData = string.Empty;
    using (FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read))
    {
        byte[] filebytes = new byte[fs.Length];
        fs.Read(filebytes, 0, Convert.ToInt32(fs.Length));
        encodedData = Convert.ToBase64String(filebytes, Base64FormattingOptions.InsertLineBreaks);
    }

    return encodedData;
}

public static void Base64ToFile(string Source, string FileName)
{
    byte[] filebytes = Convert.FromBase64String(Source);
    using (FileStream fs = new FileStream(FileName, FileMode.Create /*New*/, FileAccess.Write, FileShare.None))
    {
        fs.Write(filebytes, 0, filebytes.Length);
        fs.Close();
    }
}
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Десериализовать класс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]