XmlReturnWriter.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. //
  2. // System.Web.Services.Protocols.XmlReturnWriter.cs
  3. //
  4. // Author:
  5. // Tim Coleman ([email protected])
  6. //
  7. // Copyright (C) Tim Coleman, 2002
  8. //
  9. using System.IO;
  10. using System.Web;
  11. using System.Xml.Serialization;
  12. namespace System.Web.Services.Protocols {
  13. internal class XmlReturnWriter : MimeReturnWriter {
  14. XmlSerializer serializer;
  15. #region Methods
  16. public override object GetInitializer (LogicalMethodInfo methodInfo)
  17. {
  18. LogicalTypeInfo sti = TypeStubManager.GetLogicalTypeInfo (methodInfo.DeclaringType);
  19. return new XmlSerializer (methodInfo.ReturnType, sti.GetWebServiceLiteralNamespace (sti.WebServiceNamespace));
  20. }
  21. public override object[] GetInitializers (LogicalMethodInfo[] methodInfos)
  22. {
  23. XmlReflectionImporter importer = new XmlReflectionImporter ();
  24. XmlMapping[] sers = new XmlMapping [methodInfos.Length];
  25. for (int n=0; n<sers.Length; n++)
  26. {
  27. LogicalMethodInfo metinfo = methodInfos[n];
  28. if (metinfo.IsVoid)
  29. sers[n] = null;
  30. else
  31. {
  32. LogicalTypeInfo sti = TypeStubManager.GetLogicalTypeInfo (metinfo.DeclaringType);
  33. sers[n] = importer.ImportTypeMapping (methodInfos[n].ReturnType, sti.GetWebServiceLiteralNamespace (sti.WebServiceNamespace));
  34. }
  35. }
  36. return XmlSerializer.FromMappings (sers);
  37. }
  38. public override void Initialize (object initializer)
  39. {
  40. serializer = (XmlSerializer) initializer;
  41. }
  42. public override void Write (HttpResponse response, Stream outputStream, object returnValue)
  43. {
  44. if (serializer != null)
  45. {
  46. response.ContentType = "text/xml; charset=utf-8";
  47. serializer.Serialize (outputStream, returnValue);
  48. }
  49. outputStream.Close ();
  50. }
  51. #endregion // Methods
  52. }
  53. }