如何从web服务方法返回多维数组
本文关键字:返回 数组 方法 服务 web | 更新日期: 2023-09-27 18:07:05
[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()
根据您之前的问题和您在答案下的注释中指定的错误,我认为您应该返回一个锯齿数组,如:
[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;
}
您在问题异常中有答案- 不支持多维数组。在System.Xml.Serialization。你必须以不同的方式返回它-锯齿数组或编写自己的序列化器
我有同样的问题,一年后,但我寻找了几个解决方案,如果你想返回JSON或XML,那么你只需要调用序列化器。我创建了一个Dictionary对象并返回这个。它在网页中工作得很好,但不适用于web服务。经过一番寻找,我找到了这个Json Object序列化器。我只需要将我的对象传递给JsonConvert(SerializeObject),然后JSON回来,web服务就可以工作了!这是一个了不起的软件包:http://james.newtonking.com/json。