SerializeObjectstoXmlDocument为了在AsapxWebService的SoapException.Detail中返回有用的信息,我借鉴了WCF的思路,创建了一个文件,其中包含所说的有用消息的错误类.然后将此故障对象序列化为抛出的SoapException所需的XmlNode。我想知道我是否有创建XmlDocument的最佳代码——我是这样看的:varxmlDocument=newXmlDocument();varserializer=newXmlSerializer(typeof(T));使用(varstream=newMemoryStream()){serializer.Serialize(stream,theObjectContainingUsefulInformation);stream.Flush();stream.Seek(0,SeekOrigin.Begin);xmlDocument.Load(流);}有没有更好的办法?更新:我实际上最终做了以下事情,因为除非你将XML包装在一个xml元素中,否则你会在客户端得到一个SoapHeaderException:varserialiseToDocument=newXmlDocument();varserializer=newXmlSerializer(typeof(T));使用(varstream=newMemoryStream()){serializer.Serialize(stream,e.ExceptionContext);stream.Flush();stream.Seek(0,SeekOrigin.Begin);serialiseToDocument.Load(流);}//移除xml声明serialiseToDocument.RemoveChild(serialiseToDocument.FirstChild);//记住我们想要的节点varserializedNode=serialiseToDocument.FirstChild;//并将其包装在一个元素中varrootNode=serialiseToDocument.CreateNode(XmlNodeType.Element,"detail","");rootNode.AppendChild(serialisedNode);更新2:鉴于JohnSaunders的出色回答,我现在开始使用以下内容:privatestaticvoidSerialiseFaultDetail(){varfault=newServiceFault{Message="Exceptionoccurred",ErrorCode=1010};//序列化为XML文档vardetailDocument=newXmlDocument();varnav=detailDocument.CreateNavigator();if(nav!=null){使用(XmlWriterwriter=nav.AppendChild()){varser=newXmlSerializer(fault.GetType());ser.Serialize(作者,错误);}}//记住并移除我们想要的元素XmlNodeinfoNode=detailDocument.FirstChild;detailDocument.RemoveChild(信息节点);//移动到根元素varrootNode=detailDocument.AppendChild(detailDocument.CreateNode(XmlNodeType.Element,"detail",""));rootNode.AppendChild(infoNode);Console.WriteLine(detailDocument.OuterXml);控制台.ReadKey();}EDIT:insidethedetailelementCreateoutput以上是C#学习教程:SerializetheobjectintoXmlDocumenttoshareallcontent.如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicclassMyFault{publicintErrorCode{得到;放;}publicstringErrorMessage{get;放;}}publicstaticXmlDocumentSerializeFault(){varfault=newMyFault{ErrorCode=1,ErrorMessage="这是一个错误"};varfaultDocument=newXmlDocument();varnav=faultDocument.CreateNavigator();使用(varwriter=nav.AppendChild()){varser=newXmlSerializer(fault.GetType());ser.Serialize(作者,错误);}vardetailDocument=newXmlDocument();vardetailElement=detailDocument.CreateElement("exc",SoapException.DetailElementName.Name,SoapException.DetailElementName.Namespace);detailDocument.AppendChild(detailElement);detailElement.AppendChild(detailDocument.Document.ImportNode.faultEcumentNode(真));返回详细文档;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
