[英]Passing an Xml from a Web Service
我有一個 web 服務,它返回MyData
類型的東西。
public class MyData
{
public string Name;
[XmlElement("item")]
public Object[] DataItems;
}
我已將Object[]
用於DataItems
,因為數組的類型可能有多種類型。 我有兩個不同的類,我可以使用這種方法成功發送它們。 見下文。
clientResults
是填充的數據集。
MyData returnResult = new MyData();
MyFirstClass[] resultData = new MyFirstClass[clientResults.Tables[0].Rows.Count];
resultData.MyFirstClassProperty1 = "Blah Blah";
resultData.MyFirstClassProperty2 = "Blah Blah";
returnResult.DataItems = resultData.
我可以輕松地將MyFirstClass
更改為MySecondClass
並設置其自己的屬性,web 服務將正確序列化這兩個類,每個人都很高興!
但是現在需要傳遞由DataSet.GetXml()
function 返回的 XML。
當然,我所做的是
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(clientResults.GetXml());
resultData.DataItems = new XmlDocument[] { xdoc };
但這是拋出異常
System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: The type System.Xml.XmlDocument may not be used in this context.
所以我想,好吧,讓我們用 XmlNode 試試吧。
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(clientResults.GetXml());
XmlNode xElement = xdoc.SelectSingleNode("/");
result.DataItems = new XmlNode[] { xElement };
仍然拋出相同的異常。 有什么問題?
如何通過 web 服務正確傳遞 XML?
答案很簡單。 我所要做的就是創建一個父 class 其他類將從中繼承。
public class BaseData
{
}
public class XmlData : BaseData
{
public XmlNode xml;
}
我將Object[]
設為BaseData[]
。
public class MyData
{
public string Name;
[XmlElement("item")]
public BaseData[] DataItems;
}
然后我使用 XPath 選擇節點並分配它。
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(clientResults.GetXml());
XmlNode xElement = xdoc.SelectSingleNode("/");
XmlData[] xmlData = new XmlData[1];
xmlData[0] = new XmlData();
xmlData[0].xml = xElement;
result.DataItems = xmlData;
我還必須將XmlInclude(typeof(XmlData))
放入 web 服務方法簽名。
它運行良好!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.