在Windows中序列化对象列表并在WCF中反序列化

时间:2012-04-17 15:25:12

标签: c# java android vb.net wcf

我在android中有一个ArrayList,我正在尝试转换为Base64字符串,然后通过JSON将其传递给wcf服务,并且wcf服务将字符串插入数据库。然后我需要能够从数据库中读取它并在.NET应用程序中反序列化它。

这就是我在android中序列化ArrayList的方法:

    private String convertByteArrayToSave(byte[] b){
    if(b != null){
        return Base64.encodeToString(b,0,b.length,Base64.DEFAULT);
    }else{
        return "";
    }
}

private String convertListToStringToSave(ArrayList<myClasses.Shape> myList){
    ByteArrayOutputStream b = new ByteArrayOutputStream();
    ObjectOutputStream out;
    try {
        out = new ObjectOutputStream (b);
        out.writeObject(myList);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return convertByteArrayToSave(b.toByteArray());
}

然后在WCF服务中我试图获取Base64字符串并将其反序列化为List(Of Shape)并序列化它以将其插入数据库。

    Private Function ConvertAndroidByteToDotNet(ByVal s As String) As Byte()
    Dim result As Byte() = Nothing
    Dim b As Byte() = CType(System.Convert.FromBase64String(s), Byte())
    Dim msTest As New MemoryStream(b)
    msTest.Seek(0, SeekOrigin.Begin)
    msTest.Position = 0
    Dim formatter As New Runtime.Serialization.Formatters.Binary.BinaryFormatter()
    formatter.AssemblyFormat = Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple
    formatter.Binder = New BindChanger()
    Dim shapelist As List(Of ColbyDataTypes.Shape) = DirectCast(formatter.Deserialize(msTest), List(Of ColbyDataTypes.Shape))
    msTest.Close()

    Dim bin As New Runtime.Serialization.Formatters.Binary.BinaryFormatter()
    bin.AssemblyFormat = Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple
    bin.Serialize(msTest, shapelist)

    result = msTest.ToArray()

    Return result
End Function

最终目标是能够在.NET应用程序或Android应用程序中创建这些形状的列表,并能够读取.NET应用程序和Android应用程序中的列表,无论它是从哪里创建的。当你从.NET创建Shape并使用WCF将其读入android时,我能够实现它,但是在android中创建它是我被困住的地方。非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

我会选择JSON数据格式,GSON来解析android端的对象。它使用起来非常简单轻便。查看此consuming web service from android using JSON或此JSON parse,希望获得此帮助。