0
[WebMethod]
public  Object  GetAllItemsArray() 
{
        FoodCityData.ShoppingBuddyEntities fdContext = new FoodCityData.ShoppingBuddyEntities();

        IQueryable<Item> Query =
       from c in fdContext.Item
       select c;

        List<Item> AllfNames = Query.ToList();
        int arrayZise = AllfNames.Count;
        String[,] xx = new String[arrayZise,2];
        int i = 0;
        int j = 0;
        foreach(Item x in AllfNames)
        {

                xx[i,0] = x.ItemName.ToString();
                xx[i, 1] = x.ItemPrice.ToString();
                i++;
        }

         return (Object)xx;
    }

我想从这个 Web 服务返回一个多维数组,我该怎么做?

此代码给出错误

实际上,这个 Web 服务是从 android 应用程序调用的,这就是我将这些数据作为多维数组返回的原因。

错误是:

System.InvalidOperationException: There was an error generating the XML document. ---> System.NotSupportedException: Cannot serialize object of type System.String[,]. Multidimensional arrays are not supported.
   at System.Xml.Serialization.TypeDesc.CheckSupported()
   at System.Xml.Serialization.TypeScope.GetTypeDesc(Type type, MemberInfo source, Boolean directReference, Boolean throwOnError)
   at System.Xml.Serialization.XmlSerializationWriter.CreateUnknownTypeException(Type type)
   at System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(String name, String ns, Object o, Boolean xsiType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(String n, String ns, Object o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write5_anyType(Object o)
   at Microsoft.Xml.Serialization.GeneratedAssembly.ObjectSerializer.Serialize(Object objectToSerialize, XmlSerializationWriter writer)
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces)
   at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o)
   at System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue)
   at System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream)
   at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues)
   at System.Web.Services.Protocols.WebServiceHandler.Invoke()
4

3 回答 3

2

根据您之前的问题和您在答案下方的评论中指定的错误,我相信您应该返回一个锯齿状数组,例如:

[WebMethod]
public  string[][]  GetAllItemsArray() 
{
        FoodCityData.ShoppingBuddyEntities fdContext = new FoodCityData.ShoppingBuddyEntities();

        IQueryable<Item> Query =
       from c in fdContext.Item
       select c;

        List<Item> AllfNames = Query.ToList();
        int arrayZise = AllfNames.Count;
        String[][] xx = new String[arrayZise][2]; //change here
        int i = 0;
        int j = 0;
        foreach(Item x in AllfNames)
        {

                xx[i][0] = x.ItemName.ToString();
                xx[i][1] = x.ItemPrice.ToString();
                i++;
        }

         return xx;
 }
于 2013-04-03T06:23:05.873 回答
1

您在问题异常中有答案 -不支持多维数组。在 System.Xml.Serialization。您必须以某种不同的方式返回它 - 锯齿状数组或编写自己的序列化程序。

于 2013-04-03T06:27:58.797 回答
0

一年后我遇到了同样的问题,但我寻找了几种解决方案,如果你想返回 JSON 或 XML,那么你只需要调用一个序列化程序。我创建了一个 Dictionary 对象并返回它。它在网页中运行良好,但不适用于 Web 服务。所以经过一番寻找后,我找到了这个 Json Object 序列化器。我只需要将我的对象传递给 JsonConvert(SerializeObject) 并且 whalla JSON 会返回并且 Web 服务可以正常工作!这是一个很棒的包:http: //james.newtonking.com/json

于 2014-04-11T16:05:32.243 回答