2012-05-30 39 views
0

我有一个简单的Web服务,它从数据库抓取数据,并且我想将这些数据作为数据集,字符串,XML返回。但Web服务XML没有得到我返回的类型。问题是,是否有可能返回对象和Web服务XML来显示正确的标记。目前它显示这个标签anytype而不是字符串例如。Web服务从方法返回匿名对象

这里是方法

[WebMethod] 
public Object serviceForPostcode(String postCode, String type) 
{ 
/** 
* 
* create dataset to store query 
* convert dataset to required return type 
* create types for returned object 
* 
* 
**/ 

    SqlDataAdapter adapter = new SqlDataAdapter(); 
    SqlCommand cmd = new SqlCommand(); 
    SqlConnection conn = new SqlConnection(dbConnection()); 
/** 
* 
*    -- types-- 
* 
**/ 
    XmlDocument xmlD = new XmlDocument(); 
    StringWriter sw = new StringWriter(); 
    DataSet dataSet = new DataSet(); 
/** 
* 
* 
**/ 

    // connection and query string 
    string dbQuery = "SELECT id, address1, address2, address3, address4, address5, post_code, country FROM paf WHERE (post_code = @postCode)"; 
    try 
    { 
     cmd.Parameters.Add(new SqlParameter("@postcode",SqlDbType.NChar, 10)).Value = postCode.ToUpper(); 
     cmd.CommandText = (dbQuery); 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = conn; 
     adapter.SelectCommand = cmd; 
     adapter.Fill(dataSet,"post codes"); 

    } 
    catch(Exception e) 
    { 
     System.Web.HttpContext.Current.Response.Write(e.Message); 

    } 
    finally 
    { 
     //close database connection 
     conn.Close(); 
    } 
    if (type.Equals("xml", StringComparison.InvariantCultureIgnoreCase)) 
    { 
     return dataSet.GetXml(); 
    } 
    else if (type.Equals("string", StringComparison.InvariantCultureIgnoreCase)) 
    { 

     dataSet.WriteXml(sw); 
     return sw.ToString(); 
    } 
    else if(type.Equals("dataset",StringComparison.InvariantCultureIgnoreCase)) 
    { 
     return ""; 
    } 

     return "error"; 
} 
+0

所以,你想一个方法,可以返回3种不同类型? – Pete

回答

1

为什么不创建三种不同的方法?

public string serviceForPostcodeString(String postCode) 

public XElement serviceForPostcodeXML(String postCode) 

public DataSet serviceForPostcodeDataSet(String postCode) 

或者总是返回一个DataSet并让消费者将其转换为XML或String。

编辑

一招会使用泛型类型,但不会对web服务工作。但是,您也可以在客户端使用通用方法将您的调用包装到Web服务中。事情是这样的:

public T serviceForPostcodeWrapped<T>(String postCode) 
{ 
    // ... do some checking for allowed types here ... 
    return (T)serviceForPostcode(postCode, typeof(T).Name); 
} 

声明:我说你,不你应该

+0

我可以,我只是觉得可能有一种方法使这项工作 –

0

试试这个:

[WebMethod] 
public string serviceForPostcode(String postCode, String type) 
+0

然后所有对象都是字符串类型。我可能会返回xmldocument,这是行不通的。 –