将对象从Android客户端应用程序发送到C#服务器应用程序

将对象从Android客户端应用程序发送到C#服务器应用程序,c#,java,android,C#,Java,Android,Java代码: public class EMessage implements Serializable { private Bitmap image; private String type; EMessage() {} } ... EMessage eMessage=new EMessage(); outToServer = new DataOutputStream(clientSocket.getOutputStream()); objectOutputStream=ne

Java代码:

public class EMessage implements Serializable
{

private Bitmap image;

private String type;

EMessage()

{}

}
...

EMessage eMessage=new EMessage();

outToServer = new DataOutputStream(clientSocket.getOutputStream());

objectOutputStream=new ObjectOutputStream(outToServer);

objectOutputStream.writeObject(eMessage);
C#代码:

当我从Android客户端应用程序(java编码)发送一个对象,并在C#Server应用程序中接收该对象时,但有一个例外。 “输入流不是有效的二进制格式。起始内容(以字节为单位)为: 00-05-73-72-00-1D-63-6F-6D-2E等”;
请提出任何简单的解决方案。我的项目没有那么复杂。我只需要发送一个
EMessage
对象。

序列化格式是特定于平台的,Java和.NET序列化彼此不兼容。改用JSON(而且调试起来也更容易)。

为什么不使用SOAP,这里有一篇文章详细介绍您正在做的事情(android到.net)


出于上述原因(Java序列化不同于C#序列化),我建议您放弃
序列化,并以纯字节数组在Java和C#应用程序之间传输数据

您可以将位图图像转换为字节数组,如so():

当然,如果情况需要,您可以更改压缩格式。在此之后,您还可以将
类型
字符串转换为字节数组,并在其末尾添加空终止符

到达后,可以先发送
类型
字符串,然后添加位图的字节数组。在C端,您可以读取传入数据,直到到达
0
终止符,此时您将知道您已读取
EMessage
对象的字符串部分,然后读取发送过来的其余字节,并将其解析为
位图
对象


这样,您就可以确保在Java和C实现之间不会遇到任何兼容性问题。它可能需要更多的代码和更多的理解,但它比在两种语言之间序列化要可靠得多。

aevitas,非常感谢。我喜欢你的建议。现在对我来说很容易。@NoorNawaz谢谢,如果你的问题得到了正确的回答,向上投票或接受都不会有什么坏处。
[Serializable]

class EMessage

{

    private Bitmap image;

    private String type;

    EMessage()

    { }

}

client = server.AcceptTcpClient();

 Connected = client.Connected;

            ns = client.GetStream();
 IFormatter formatter = new 

 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

 EMessage recievedmsg = (EMessage)formatter.Deserialize(ns);
Bitmap bmp = intent.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();