首页 新闻 会员 周边 捐助

WCF序列化问题-Hashtable,List等怎么从客户端传到服务器端

0
悬赏园豆:10 [已关闭问题] 关闭于 2011-05-31 16:31

看了很多WCF的文章,说到这个就是序列化,本人对序列化不是很懂,看了很久也不明白在WCF中要把Hashtable以及list之类的对象从客户端传到服务器端具体怎么写,

下面的order类在服务器和客户端的数据契约中都有定义。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;


namespace DataContracts
{
    [DataContract]
    public class OrderBase
    {
        [DataMember]
        public Guid ID
        { get; set; }

        [DataMember]
        public DateTime Date
        { get; set; }

        [DataMember]
        public string Customer
        { get; set; }

        [DataMember]
        public string ShipAddress
        { get; set; }

        public double TotalPrice
        { get; set; }
    }

    [DataContract]
    public class Order : OrderBase
    {
        [DataMember]
        public string PaymentType
        { get; set; }
    }
}

服务器端被调用的函数

[ServiceKnownType(typeof(Order))]
        public object RunGlobalDALMethod(string className, string methodName, object[] parameters)
        {
            try
            {

    //这里想处理客户端传过来的hashtable和order或list等信息
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                return null;
            }
        }

客户端示例代码如下:

using (PHMContractsClient calculator_tcp = new PHMContractsClient("NetTcpBinding_IPHMContracts")) //获取服务器通信地址和端口等
            {
                try
                {                    
                    Hashtable hs = new Hashtable(); //定义的Hashtable
                    hs.Add("t1", "ggg");
                    hs.Add("t2", "ttt");
                   

                    Order order = new Order() //同时也定义了一个客户端和服务器端都有的Order表
                    {
                        ID = Guid.NewGuid(),
                        Date = DateTime.Today,
                        Customer = "NCS",
                        ShipAddress = "#328, Airport Rd, Industrial Park, Suzhou JiangSu Province",
                        TotalPrice = 8888,
                        PaymentType = "Credit Card"
                     };

                    object[] parameters = new object[] { hs,order };

       //调用服务器的函数,希望把hashtable和order传送过去。

                    DataSet gg = (DataSet) calculator_tcp.RunServerMethod(parameters);
                    dataGridView1.DataSource = gg.Tables[0].DefaultView;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

结果报错如下:

---------------------------

---------------------------
尝试对参数 http://tempuri.org/ 进行序列化时出错: parameters。InnerException 消息是“数据协定名称为“Order:http://schemas.datacontract.org/2004/07/DataContracts”的类型“DataContracts.Order”不是所需的类型。请将未知的类型以静态方式添加到已知类型的列表,例如,通过使用 KnownTypeAttribute 属性或通过将其添加到传递给 DataContractSerializer 的已知类型的列表等方法。” 。有关详细信息,请参见 InnerException。

不知道如何解决这个问题,对WCF比较菜鸟,望高手帮忙,

问题补充: 上面笔误,服务器端的函数应该是RunServerMethod(object []parameters);
jonycon的主页 jonycon | 初学一级 | 园豆:200
提问于:2011-04-28 11:13
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册