您的位置:首页 > 其它

WCF不支持多维数组

2014-11-21 15:03 141 查看
其实用类数组好一些:http://blog.csdn.net/wr6521941/article/details/41479489

使用WCF并且out二维数组的时候,出现错误

查询百度后得知wcf无法将我out的数组序列化。需手动序列化

因此,添加序列化代码(我使用的是序列化后返回byte[]数组)

 public string ShowFlightNo(string weixin_id, out byte[] a)
        {
            string[,] arr = new string[0, 0];
            a=new byte[]{0};
           
                DataSet ds = m.GetFlightNo2(str);
                arr = new string[ds.Tables[0].Rows.Count,3];

                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    DataRow dr = ds.Tables[0].Rows[i];
                    arr[i, 0] = Convert.ToString(dr["flight_id"]);
                    arr[i, 1] = Convert.ToString(dr["std"]);
                    arr[i, 2] = Convert.ToString(dr["flight_no"]);
                }
                using (MemoryStream ms = new MemoryStream())
                {
                    IFormatter f = new BinaryFormatter();
                    f.Serialize(ms, arr);
                    ms.ToArray();
                    a=ms.ToArray();
                }
               
                All = "可订餐航班:";
                
                //-----------------------
            }
            return All;
            
        }


调用时,反序列化

string info = "";
string a,b,c;
IFormatter fs = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream(bb))
{

string[,] obj = fs.Deserialize(ms) as string[,];
for (int i = 0; i < obj.GetLength(0); i++)
{
a=obj[i, 0].ToString();
b=obj[i, 1].ToString();
c=obj[i, 2].ToString();
info += i + "," + a + "," + b + "," + c + ";";
}
Label5.Text = info.ToString();
}


总结序列化反序列化代码

using (MemoryStream ms = new MemoryStream())
{
IFormatter f = new BinaryFormatter();
f.Serialize(ms, arr);
ms.ToArray();

}
IFormatter fs = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream(a.ToArray()))
{
var obj = fs.Deserialize(ms);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: