\r
using System.IO;\r
using System.Net;\r
+using System.Xml.Serialization;\r
using System.Web.Services;\r
\r
namespace System.Web.Services.Protocols {\r
public class XmlReturnReader : MimeReturnReader {\r
\r
+ XmlSerializer serializer;\r
+ \r
#region Constructors\r
\r
public XmlReturnReader () \r
\r
#region Methods\r
\r
- [MonoTODO]\r
public override object GetInitializer (LogicalMethodInfo methodInfo)\r
{\r
- throw new NotImplementedException ();\r
+ LogicalTypeInfo sti = TypeStubManager.GetLogicalTypeInfo (methodInfo.DeclaringType);\r
+ return new XmlSerializer (methodInfo.ReturnType, sti.GetWebServiceLiteralNamespace (sti.WebServiceNamespace));\r
}\r
\r
- [MonoTODO]\r
public override object[] GetInitializers (LogicalMethodInfo[] methodInfos)\r
{\r
- throw new NotImplementedException ();\r
+ XmlReflectionImporter importer = new XmlReflectionImporter ();\r
+ XmlMapping[] sers = new XmlMapping [methodInfos.Length];\r
+ for (int n=0; n<sers.Length; n++)\r
+ {\r
+ LogicalMethodInfo metinfo = methodInfos[n];\r
+ if (metinfo.IsVoid) \r
+ sers[n] = null;\r
+ else\r
+ {\r
+ LogicalTypeInfo sti = TypeStubManager.GetLogicalTypeInfo (metinfo.DeclaringType);\r
+ sers[n] = importer.ImportTypeMapping (methodInfos[n].ReturnType, sti.GetWebServiceLiteralNamespace (sti.WebServiceNamespace));\r
+ }\r
+ }\r
+ return XmlSerializer.FromMappings (sers);\r
}\r
-\r
- [MonoTODO]\r
+ \r
public override void Initialize (object o)\r
{\r
- throw new NotImplementedException ();\r
+ serializer = (XmlSerializer)o;\r
}\r
\r
- [MonoTODO]\r
public override object Read (WebResponse response, Stream responseStream)\r
{\r
- throw new NotImplementedException ();\r
+ object result = null;\r
+ if (serializer != null)\r
+ {\r
+ if (response.ContentType.IndexOf ("text/xml") == -1)\r
+ throw new InvalidOperationException ("Result was not XML");\r
+ \r
+ result = serializer.Deserialize (responseStream);\r
+ }\r
+ responseStream.Close ();\r
+ return result;\r
}\r
\r
#endregion // Methods\r
}\r
-}\r
+}