当前位置:编程学习 > C#/ASP.NET >>

DictionaryEntry在webservice返回时为何类型转换不了


        // 服务端方法
        [WebMethod, Description("获取内部网络的连接信息")]
        public DictionaryEntry[] GetInnerIPAndPort(string userName, string pwd)
        {
            if (!ServerUser.CheckUser(userName, pwd))
                return null;
            else
            {
                Hashtable sl = new Hashtable();
                sl.Add("IP", ServerCongfig.IP);
                sl.Add("PORT", ServerCongfig.Port);
                DictionaryEntry[] array = new DictionaryEntry[sl.Count];
                sl.CopyTo(array, 0);
                return array;
            }
        }

        // 客户端调用
        DictionaryEntry[] result = (DictionaryEntry[])method.Invoke(obj, args);


客户端在调用时,是动态加载服务引用的,同时调试的时候,在服务端打断点都已经进去执行了,获取值也没有问题,
就是在方法执行完毕后,返回到客户端时报错了,
“无法将类型为“MyWebService.DictionaryEntry[]”的对象强制转换为类型“System.Collections.DictionaryEntry[]”。”
MyWebService是服务端方法的命名空间,不知道为什么会出现这个问题,
找了好多资料没弄明白,大家帮帮忙,指教一下,谢谢了~~ --------------------编程问答-------------------- --------------------编程问答-------------------- 把数组转换成DataSet返回就可以了 --------------------编程问答--------------------
引用 2 楼 maonongwu 的回复:
把数组转换成DataSet返回就可以了


DataSet result = (DataSet)method.Invoke(obj, args);??
还是报类型转换的错误。。。

尽量不改服务端的方法比较好 --------------------编程问答-------------------- 你何不改成一个类的集合呢!这样更合理
  [WebMethod]
  public Order[] GetOrders()
  {
   Order[] myOrder=new Order[2];

   myOrder[0]=new Order();
   myOrder[0].Price=34.5;
   myOrder[0].OrderID=323232;
   myOrder[1]=new Order();
   myOrder[1].Price=99.9;
   myOrder[1].OrderID=646465;
   return myOrder;
  }

  public struct Order
 {
  public int OrderID;
  public double Price;
 }

那个类型不支持 --------------------编程问答--------------------
引用 4 楼 tsapi 的回复:
你何不改成一个类的集合呢!这样更合理

C# code
  [WebMethod]
  public Order[] GetOrders()
  {
   Order[] myOrder=new Order[2];

   myOrder[0]=new Order();
   myOrder[0].Price=34.5;
   myOrder[0].OrderID=323232……


改成这样是可以正常获取值的,
可是我本来就是想用DictionaryEntry里的Key和value属性的,不支持吗?
我知道Dictionary是不支持的,需要序列化,在有些资料看DictionaryEntry[]是可以支持的,
不过在做的时候发现客户端还是转换不了 。。。
--------------------编程问答-------------------- --------------------编程问答-------------------- “无法将类型为“MyWebService.DictionaryEntry[]”的对象强制转换为类型“System.Collections.DictionaryEntry[]”。”

因为序列化成本地代理了,DictionaryEntry在你的本地代理命名空间下。
MyWebService.DictionaryEntry[] result = (MyWebService.DictionaryEntry[])method.Invoke(obj, args);

直接用.net 的Dictionary<string, string>不是更好?

[WebMethod, Description("获取内部网络的连接信息")]
        public Dictionary<string, string> GetInnerIPAndPort(string userName, string pwd)
        {
            if (!ServerUser.CheckUser(userName, pwd))
                return null;
            else
            {
                Dictionary<string, string> sl = new Dictionary<string, string>();
                sl.Add("IP", ServerCongfig.IP);
                sl.Add("PORT", ServerCongfig.Port);
                return sl;
            }
        }



--------------------编程问答--------------------
引用 7 楼 fangxinggood 的回复:
“无法将类型为“MyWebService.DictionaryEntry[]”的对象强制转换为类型“System.Collections.DictionaryEntry[]”。”

因为序列化成本地代理了,DictionaryEntry在你的本地代理命名空间下。
MyWebService.DictionaryEntry[] result = (MyWebService.Dictionary……


直接用Dictionary提示报错不支持类型,
我就是不想再写一个Dictionary的序列化的类型所以才想用DictionaryEntry的
--------------------编程问答-------------------- WebMethod的确不支持,Dictionary。。。

那你只能用本地代理命名空间下的 DictionaryEntry[] 了。

附带一篇别人的调查结果:
http://hi.baidu.com/130446677/blog/item/30409455440acccdb745aeeb.html
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,