2 // System.Web.Services.Protocols.XmlReturnReader.cs
\r
5 // Tim Coleman (tim@timcoleman.com)
\r
7 // Copyright (C) Tim Coleman, 2002
\r
12 using System.Xml.Serialization;
\r
13 using System.Web.Services;
\r
15 namespace System.Web.Services.Protocols {
\r
16 public class XmlReturnReader : MimeReturnReader {
\r
18 XmlSerializer serializer;
\r
20 #region Constructors
\r
22 public XmlReturnReader ()
\r
26 #endregion // Constructors
\r
30 public override object GetInitializer (LogicalMethodInfo methodInfo)
\r
32 LogicalTypeInfo sti = TypeStubManager.GetLogicalTypeInfo (methodInfo.DeclaringType);
\r
33 return new XmlSerializer (methodInfo.ReturnType, sti.WebServiceLiteralNamespace);
\r
36 public override object[] GetInitializers (LogicalMethodInfo[] methodInfos)
\r
38 XmlReflectionImporter importer = new XmlReflectionImporter ();
\r
39 XmlMapping[] sers = new XmlMapping [methodInfos.Length];
\r
40 for (int n=0; n<sers.Length; n++)
\r
42 LogicalMethodInfo metinfo = methodInfos[n];
\r
43 if (metinfo.IsVoid)
\r
47 LogicalTypeInfo sti = TypeStubManager.GetLogicalTypeInfo (metinfo.DeclaringType);
\r
48 sers[n] = importer.ImportTypeMapping (methodInfos[n].ReturnType, sti.WebServiceLiteralNamespace);
\r
51 return XmlSerializer.FromMappings (sers);
\r
54 public override void Initialize (object o)
\r
56 serializer = (XmlSerializer)o;
\r
59 public override object Read (WebResponse response, Stream responseStream)
\r
61 object result = null;
\r
62 if (serializer != null)
\r
64 if (response.ContentType.IndexOf ("text/xml") == -1)
\r
65 throw new InvalidOperationException ("Result was not XML");
\r
67 result = serializer.Deserialize (responseStream);
\r
69 responseStream.Close ();
\r
73 #endregion // Methods
\r