我现在使用下面的代码片段来反序列化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'> 没想到。
答案 0 :(得分:2)
我猜它是一个命名空间问题(即xml命名空间)。你能展示一下xml和Order
类的例子吗?
有关信息,您可以通过以下方式阅读XmlDocument
“,通过:
sendOrder.Order orderDoc;
using(XmlReader reader = new XmlNodeReader(xmlDoc.DocumentElement)) {
orderDoc = (sendOrder.Order) serializer.Deserialize(reader);
}
比弄乱编码和流更简单......
使用您的示例xml /代码,您可以通过添加:
来解决此问题[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
你有默认的构造函数吗?