碰到这么一个问题
通过webservice执行一个函数,返回值是一个object[]数组
然后里面每一个元素又是一个数组,也就是说object[0]本身也有一系列子元素,这些子元素是short类型数值。
但是我没能直接short[] array=object[0] as short[]这么转换。
也没能object[0][0]这样来访问object[]中第一个元素的第一个子元素。请问应该如何访问这种数值?

解决方案 »

  1.   

    设计你的服务方法时,其参数给出具体到实体的类型,而不是object。如果你设计时含糊地不知道类型,程序也就像无头苍蝇一样。
      

  2.   

    我暂时没有看到原webservice的源代码
    只能用对象管理器看见提供的函数原型
    public object[] GetData(int Id)webservice的设计者跟我说可以short[] data=object[0]这么用,但是实际上不行,data数组没有值
      

  3.   

    webservice的设计者跟我说可以short[] data=object[0]这么用
    他自己都不知道他写的东西能做什么,他写的东西你还怎么调用。
      

  4.   

    Object 已经是最基类型了,什么东西都能转成object,但是反起来就有问题,还是需要看是啥类型
      

  5.   

    楼主的意思是WebService返回一个Object[]数组,它的子元素也是Short[]webservice的设计者跟我说可以short[] data=object[0]这么用
    对啊,就这样就可以啊
      

  6.   

    应该是
    short[] data=(short[])(object[0]);
      

  7.   

    [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public System.Collections.ArrayList GetData(int Id)
        {
            DataClassesDataContext db = new DataClassesDataContext();
            Ecg ecg = db.Ecgs.First(p => p.id == ecgId);
            short[,] data = (short[,])Helper.ByteArrayToObject(ecg.ecg_data.ToArray());        System.Collections.ArrayList al = new System.Collections.ArrayList();
            int length = data.GetUpperBound(1);        for (int k = 0; k < 12; k++)
            {
                System.Collections.ArrayList inner = new System.Collections.ArrayList();
                for (int i = 0; i < length; i++)
                {
                    inner.Add(data[k, i]);
                }
                al.Add(inner);
            }        return al;
        }
    我看到了源代码,但是不知道怎么把数据取出来。
    把webservice函数返回的object[]直接转arrayList,编译时也提示不能转
      

  8.   

    如果你只是问short[]到object[]的转换,逐个转就是了。就算用Cast<>其实也是逐个转的至于接口到底返回的是啥,能找到人就问人,找不到就跟踪起来监视窗口一下就看见了。经常维护别人的代码已经习惯这么做了,比去问作者还方便
      

  9.   

    short[] sarr = (object[0] as object[]).Select(o=>(short)o).ToArray();
      

  10.   

    多谢大家的热心帮助。
    这个有点蛋疼,不太清楚webservice内部的数据转换,ArrayList会返回出什么东西来。
    后来我的数据读出来了,这么搞一搞单个数据强制转换,挨个取出来后,再存到数组里
    short data=(short)(((object[])ecgData[i])[j]);
      

  11.   

    返回值和是不是webservice无关,是开发人员事先定义的
      

  12.   

    AddressRelation[][] relations = innerEventArgs.Result as AddressRelation[][];
    这是偶用的。。肯定是没问题的。也是调用webservice的方法返回的。只是用了异步而已
    如果你的是short数组的数组那么换一下
    short[][] relations = webRtn as short[][];
    试试看了