Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反序列化XML文档--需要帮助吗_C#_Xml Serialization_Serialization_Web Services - Fatal编程技术网

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

C# 反序列化XML文档--需要帮助吗,c#,xml-serialization,serialization,web-services,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.UT

我现在使用下面的代码片段反序列化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对象,它的结构和名称空间都是相同的

XML文档中存在错误(1, 2). ---> System.InvalidOperationException: http://ConsureWebService.Order'> 没有预料到


我想这是一个名称空间问题(即xml名称空间)。您可以展示示例xml和
Order
类吗

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

比处理编码和流要简单得多


使用示例xml/代码,您可以通过添加以下内容来解决此问题:

[XmlRoot(Namespace = "ConsureWebService.Order")]
去上课。如果类以
部分类的形式播发自己,您甚至可以在单独的代码文件中执行此操作,因此不需要编辑生成的代码。这将是(在正确的命名空间中):

;
医嘱ID_0
订单名称\u 0
这似乎不是一个完全有效的xml文档,您可以发布整个内容吗?这有点像只给某人堆栈跟踪的第一行,然后说“好!”

编辑

这里有一个猜测:


是否有默认构造函数?

如果在GetBytes()中设置断点,请在编辑器中突出显示代码部分,然后单击编辑器工具栏上的“代码”按钮(101 010),或按键盘上的Ctrl-K键,将其格式化为代码(并获得语法突出显示和全部),xmlString的值是多少?您不能只使用
Order
作为web方法的参数吗?更新以反映您添加的注释(示例);现在可以了。如果您不能更新源代码(包括[XmlRoot]),我可以告诉您如何定制
XmlSerializer
;如果有帮助的话,请添加一条注释(到我的回复中)。我传递的XML文档如下OrderId_0 OrderName_0还有,这是sendOrder。我试图反序列化的Order对象:namespace sendOrder{[Serializable][XmlType(AnonymousType=true,namespace=“[GeneratedCode(“System.XML”,“2.0.50727.3053”)][DebuggerStepThrough][DesignerCategory(“code”)]公共类Order{public Order();公共字符串OrderId{get;set;}公共字符串OrderName{get;set;}}}}}}XmlSerializer反序列化器=新XmlSerializer(typeof(sendOrder.Order));sendOrder.orderDoc;使用(XmlReader reader=newXmlNodeReader(xmlDoc.DocumentElement)){orderDoc=(sendOrder.Order)反序列化器。反序列化(reader);}使用上面的代码片段,在调试时,我为reader thou获取空值,我可以找到xmldoch订单文件元数据文件的xml文档,我正在尝试使用公开的BTS Web服务名称pace sendOrder{[Serializable][XmlType(AnonymousType=true,Namespace=“[GeneratedCode(“System.Xml”,“2.0.50727.3053”)][DebuggerStepThrough][DesignerCategory(“code”)]公共类顺序{public Order();公共字符串OrderId{get;set;}公共字符串OrderName{get;set;}不,这是我正在传递并试图反序列化到sendOrder.Order对象的完整XML文档…这两个文档都是作为注释发布的,如果您注意到文档的名称空间和结构都是相同的…我不知道为什么会出现以下错误..System.Web.Services.Protocols.SoapException:服务器无法o进程请求。-->System.InvalidOperationException:XML文档(1,2)中存在错误。-->System.InvalidOperationException:不应出现。我正在尝试反序列化sendOrder.Order对象,该对象具有默认构造函数命名空间sendOrder{[Serializable][XmlType(AnonymousType=true,命名空间=“ConsureWebService.Order”)][GeneratedCode(“System.Xml”,“2.0.50727.3053”)][DebuggerStepThrough][DesignerCategory(“code”)]公共类顺序{public Order();公共字符串OrderId{get;set;}公共字符串OrderName{get;set;}}
[XmlRoot(Namespace = "ConsureWebService.Order")]
[XmlRoot(Namespace = "ConsureWebService.Order")]   
public partial class Order { }
<ns0:Order xmlns:ns0="ConsureWebService.Order">; 
      <OrderId>OrderId_0</OrderId> 
      <OrderName>OrderName_0</OrderName> 
 </ns0:Order>