簡體   English   中英

從 Web 服務傳遞 Xml

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM