【问题标题】:Easiest way to serialize data between C# and Android app在 C# 和 Android 应用程序之间序列化数据的最简单方法
【发布时间】:2012-10-20 10:51:00
【问题描述】:

我有一个用 C# 编写的桌面应用程序,它将与 Android 应用程序通信。通过 tcp/ip 连接在它们之间传递数据的最简单方法是什么?我对性能不太感兴趣,对易于实施更感兴趣。

【问题讨论】:

  • 我建议 gzipstream over socket。请参阅:[gzipstream 仅通过套接字转发流][1] [使用 GZipStream 进行客户端/服务器异步通信][2] [解压缩来自服务器的 GZipped 响应(套接字)][3] [1]:stackoverflow.com/questions/11050015/… [ 2]:stackoverflow.com/questions/7922206/… [3]:stackoverflow.com/questions/2619058/…
  • 为了方便使用,我建议序列化为 JSON 或类似并传递消息。我没有任何 Android 经验,但我只能假设那里有几十个 JSON 反序列化库。
  • 我同意@MikeCaron。如果不需要序列化二进制数据,JSON 在 Android 端真的很简单。使用 GSON 库(Google 的 JSON 库)。

标签: c# android serialization


【解决方案1】:

ease of implementation的意思我自然不明白你的意思。但正如我猜想的,你应该需要这些:

In [C#]:

//util function
public static void WriteBuffer(BinaryWriter os, byte[] array) {
            if ((array!=null) && (array.Length > 0) && (array.Length < MAX_BUFFER_SIZE)) {
                WriteInt(os,array.Length);
                os.Write(array);
            } else {
                WriteEmptyBuffer(os);
            }
        }

//write a string
public static void WriteString(BinaryWriter os, string value)  {
            if (value!=null) {
                byte[] array = System.Text.Encoding.Unicode.GetBytes(value);
                WriteBuffer(os,array);
            } else {
                WriteEmptyBuffer(os);
            }
        }

In [Java] Android:

/** Read a String from the wire.  Strings are represented by
 a length first, then a sequence of Unicode bytes. */
public static String ReadString(DataInputStream input_stream) throws IOException  
{
    String ret = null;
    int len = ReadInt(input_stream);
    if ((len == 0) || (len > MAX_BUFFER_SIZE)) {
        ret = "";
    } else {
        byte[] buffer = new byte[len];
        input_stream.readFully(buffer);
        ret = new String(buffer, DATA_CHARSET);
    }
    return (ret);
}   

对于更多的结构数据,例如你想在 C# 和 Java 之间发送对象,请使用 XML Serialization in C#XML Parser in Java。你可以在网上搜索这些;很多例子都在Code Project 网站上。

在Android部分,您可以使用XStream库以方便使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2011-10-06
    相关资源
    最近更新 更多