反序列化XML文档---需要帮助

时间:2009-11-12 12:36:41

标签: c# xml-serialization serialization web-services

我现在使用下面的代码片段来反序列化XML文档......

[WebMethod]
public XmlDocument OrderDocument(XmlDocument xmlDoc)
{
   XmlSerializer serializer = new XmlSerializer(typeof(sendOrder.Order));

   string xmlString = xmlDoc.OuterXml.ToString();

   byte[] buffer = ASCIIEncoding.UTF8.GetBytes(xmlString);

   MemoryStream ms = new MemoryStream(buffer);

   sendOrder.Order orderDoc = (sendOrder.Order)serializer.Deserialize(ms);

   sendOrder.WebService_ConsureWebService ws = 
         new sendOrder.WebService_ConsureWebService();

   ws.Operation_1(ref orderDoc);

   return xmlDoc;
}

任何人都可以告诉代码有什么问题,因为错误说XML文档中有错误,但是如果你检查我传递的文件,甚至Order对象都有相同的结构和命名空间< / p>

  

XML文档中存在错误(1,   2)。 ---&GT;   System.InvalidOperationException:   HTTP://ConsureWebService.Order'>   没想到。

2 个答案:

答案 0 :(得分:2)

我猜它是一个命名空间问题(即xml命名空间)。你能展示一下xml和Order类的例子吗?

有关信息,您可以通过以下方式阅读XmlDocument“,通过:

sendOrder.Order orderDoc;
using(XmlReader reader = new XmlNodeReader(xmlDoc.DocumentElement)) {
    orderDoc = (sendOrder.Order) serializer.Deserialize(reader);
}

比弄乱编码和流更简单......


使用您的示例x​​ml /代码,您可以通过添加:

来解决此问题
[XmlRoot(Namespace = "ConsureWebService.Order")]

上课。如果该类将自己称为partial class,您甚至可以在单独的代码文件中执行此操作,因此您无需编辑生成的代码。这将是(在正确的命名空间中):

[XmlRoot(Namespace = "ConsureWebService.Order")]   
public partial class Order { }

答案 1 :(得分:0)

<ns0:Order xmlns:ns0="ConsureWebService.Order">; 
      <OrderId>OrderId_0</OrderId> 
      <OrderName>OrderName_0</OrderName> 
 </ns0:Order> 

这似乎不是一个完全有效的xml文档,你可以发布整个事情吗?这有点像给某人只有堆栈跟踪的第一行并说“好吧!”

修改

以下是猜测:http://support.microsoft.com/kb/816225

你有默认的构造函数吗?