从Web服务传递Xml

时间:2011-06-09 08:46:10

标签: c# xml web-services xmldocument invalidoperationexception

我有一个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()函数返回的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?

1 个答案:

答案 0 :(得分:0)

答案很简单。我所要做的就是创建一个其他类将继承的父类。

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服务方法签名。

它完美无缺!