2011-08-02 57 views
0

有一種方法可以使webservice返回一個類型爲XElement的參數? 現在我正在使用XmlNode返回類型,但我想擺脫使用這個舊的XML庫。。使用XElement返回類型的.net webservice

我使用這個:

XDocument doc = new XDocument(); 
XElement xml = new XElement("produtos"); 
doc.Add(xml); 

//... 
var xmlDoc = new XmlDocument(); 
using (var xmlReader = doc.CreateReader()) 
{ 
    xmlDoc.Load(xmlReader); 
} 
return xmlDoc; 

我想不通爲什麼web服務不與XmlLinq工作的lib

+1

[從Web服務返回XElement]可能的重複(http://stackoverflow.com/questions/349769/returning-an-xelement-from-a-web-service) – BrokenGlass

回答

1

你應該能夠做到這一點:

[ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
public XElement GetSomething() 
{ 
    return new XElement("Something"); 
} 
+0

感謝您的回覆 我試過了它出現錯誤: System.InvalidOperationException 「不能在架構頂層使用通配符」 只需打開瀏覽器上的asmx頁面,甚至不能執行 – dcidral

+0

我認爲也許是我的錯誤答案有點誤導。您可以通過在WebService類上添加此屬性來將服務變爲ScriptService:'[System.Web.Script.Services.ScriptService]'。它的行爲與您當前的服務具有不同的架構和SOAP響應,但是如果您正在嘗試執行這些操作,它將返回XElement。 – Ocelot20

+0

或者,您可以返回XElement生成的字符串,或者編寫一個擴展方法將XElement轉換爲XmlNode,然後返回該對象,它應該可以工作。 – Ocelot20

0

我使用了擴展方法將XElement轉換爲XmlElement(根據@ Ocelot20的建議):

<System.Runtime.CompilerServices.Extension()> _ 
Public Function ToXmlElement(value As XElement) As XmlElement 
    Dim xmlDoc = New XmlDocument() 
    xmlDoc.LoadXml(value.ToString()) 
    Return xmlDoc.DocumentElement 
End Function 

似乎工作正常!