XmlReturnReader.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. //
  2. // System.Web.Services.Protocols.XmlReturnReader.cs
  3. //
  4. // Author:
  5. // Tim Coleman ([email protected])
  6. //
  7. // Copyright (C) Tim Coleman, 2002
  8. //
  9. using System.IO;
  10. using System.Net;
  11. using System.Xml.Serialization;
  12. using System.Web.Services;
  13. namespace System.Web.Services.Protocols {
  14. public class XmlReturnReader : MimeReturnReader {
  15. XmlSerializer serializer;
  16. #region Constructors
  17. public XmlReturnReader ()
  18. {
  19. }
  20. #endregion // Constructors
  21. #region Methods
  22. public override object GetInitializer (LogicalMethodInfo methodInfo)
  23. {
  24. LogicalTypeInfo sti = TypeStubManager.GetLogicalTypeInfo (methodInfo.DeclaringType);
  25. return new XmlSerializer (methodInfo.ReturnType, sti.GetWebServiceLiteralNamespace (sti.WebServiceNamespace));
  26. }
  27. public override object[] GetInitializers (LogicalMethodInfo[] methodInfos)
  28. {
  29. XmlReflectionImporter importer = new XmlReflectionImporter ();
  30. XmlMapping[] sers = new XmlMapping [methodInfos.Length];
  31. for (int n=0; n<sers.Length; n++)
  32. {
  33. LogicalMethodInfo metinfo = methodInfos[n];
  34. if (metinfo.IsVoid)
  35. sers[n] = null;
  36. else
  37. {
  38. LogicalTypeInfo sti = TypeStubManager.GetLogicalTypeInfo (metinfo.DeclaringType);
  39. sers[n] = importer.ImportTypeMapping (methodInfos[n].ReturnType, sti.GetWebServiceLiteralNamespace (sti.WebServiceNamespace));
  40. }
  41. }
  42. return XmlSerializer.FromMappings (sers);
  43. }
  44. public override void Initialize (object o)
  45. {
  46. serializer = (XmlSerializer)o;
  47. }
  48. public override object Read (WebResponse response, Stream responseStream)
  49. {
  50. object result = null;
  51. if (serializer != null)
  52. {
  53. if (response.ContentType.IndexOf ("text/xml") == -1)
  54. throw new InvalidOperationException ("Result was not XML");
  55. result = serializer.Deserialize (responseStream);
  56. }
  57. responseStream.Close ();
  58. return result;
  59. }
  60. #endregion // Methods
  61. }
  62. }