2 // System.Web.Services.Protocols.MimeFormatter.cs
5 // Tim Coleman (tim@timcoleman.com)
6 // Lluis Sanchez Gual (lluis@ximian.com)
8 // Copyright (C) Tim Coleman, 2002
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System
.Web
.Services
;
35 namespace System
.Web
.Services
.Protocols
{
36 public abstract class MimeFormatter
{
40 protected MimeFormatter ()
44 #endregion // Constructors
48 public static MimeFormatter
CreateInstance (Type type
, object initializer
)
50 MimeFormatter ob
= (MimeFormatter
) Activator
.CreateInstance (type
);
51 ob
.Initialize (initializer
);
55 public abstract object GetInitializer (LogicalMethodInfo methodInfo
);
57 public static object GetInitializer (Type type
, LogicalMethodInfo methodInfo
)
59 MimeFormatter ob
= (MimeFormatter
) Activator
.CreateInstance (type
);
60 return ob
.GetInitializer (methodInfo
);
63 public virtual object[] GetInitializers (LogicalMethodInfo
[] methodInfos
)
65 object[] initializers
= new object [methodInfos
.Length
];
66 for (int n
=0; n
<methodInfos
.Length
; n
++)
67 initializers
[n
] = GetInitializer (methodInfos
[n
]);
72 public static object[] GetInitializers (Type type
, LogicalMethodInfo
[] methodInfos
)
74 MimeFormatter ob
= (MimeFormatter
) Activator
.CreateInstance (type
);
75 return ob
.GetInitializers (methodInfos
);
78 public abstract void Initialize (object initializer
);
80 internal static object StringToObj (Type type
, string value)
83 return Enum
.Parse (type
, value);
85 switch (Type
.GetTypeCode (type
))
87 case TypeCode
.Boolean
: return XmlConvert
.ToBoolean (value);
88 case TypeCode
.Byte
: return XmlConvert
.ToByte (value);
89 case TypeCode
.DateTime
: return XmlConvert
.ToDateTime (value);
90 case TypeCode
.Decimal
: return XmlConvert
.ToDecimal (value);
91 case TypeCode
.Double
: return XmlConvert
.ToDouble (value);
92 case TypeCode
.Int16
: return XmlConvert
.ToInt16 (value);
93 case TypeCode
.Int32
: return XmlConvert
.ToInt32 (value);
94 case TypeCode
.Int64
: return XmlConvert
.ToInt64 (value);
95 case TypeCode
.SByte
: return XmlConvert
.ToSByte (value);
96 case TypeCode
.Single
: return XmlConvert
.ToSingle (value);
97 case TypeCode
.UInt16
: return XmlConvert
.ToUInt16 (value);
98 case TypeCode
.UInt32
: return XmlConvert
.ToUInt32 (value);
99 case TypeCode
.UInt64
: return XmlConvert
.ToUInt64 (value);
100 case TypeCode
.String
: return value;
102 if (value.Length
!= 1) throw new InvalidOperationException ("Invalid char value");
105 throw new InvalidOperationException ("Type not supported");
108 internal static string ObjToString (object value)
110 if (value == null) return "";
111 switch (Type
.GetTypeCode (value.GetType ()))
113 case TypeCode
.Boolean
: return XmlConvert
.ToString ((bool)value);
114 case TypeCode
.Byte
: return XmlConvert
.ToString ((byte)value);
115 case TypeCode
.Char
: return XmlConvert
.ToString ((char)value);
116 case TypeCode
.DateTime
: return XmlConvert
.ToString ((DateTime
)value);
117 case TypeCode
.Decimal
: return XmlConvert
.ToString ((decimal)value);
118 case TypeCode
.Double
: return XmlConvert
.ToString ((double)value);
119 case TypeCode
.Int16
: return XmlConvert
.ToString ((Int16
)value);
120 case TypeCode
.Int32
: return XmlConvert
.ToString ((Int32
)value);
121 case TypeCode
.Int64
: return XmlConvert
.ToString ((Int64
)value);
122 case TypeCode
.SByte
: return XmlConvert
.ToString ((sbyte)value);
123 case TypeCode
.Single
: return XmlConvert
.ToString ((Single
)value);
124 case TypeCode
.UInt16
: return XmlConvert
.ToString ((UInt16
)value);
125 case TypeCode
.UInt32
: return XmlConvert
.ToString ((UInt32
)value);
126 case TypeCode
.UInt64
: return XmlConvert
.ToString ((UInt64
)value);
127 case TypeCode
.String
: return value as string;
129 if (value.GetType().IsEnum
)
130 return value.ToString ();
132 throw new InvalidOperationException ("Type not supported");
135 #endregion // Methods