2012-05-30 53 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,這是行不通的。 –