diff options
author | Atsushi Eno <atsushieno@gmail.com> | 2009-10-08 12:59:56 +0400 |
---|---|---|
committer | Atsushi Eno <atsushieno@gmail.com> | 2009-10-08 12:59:56 +0400 |
commit | cd263cb1f496adb927884bbc5b5a56a4e9124d8a (patch) | |
tree | 969656e094feb1a86fe7e2ea4804feb10c3c9250 /mcs/class/System.ServiceModel.Web/System.ServiceModel.Dispatcher/WebMessageFormatter.cs | |
parent | 9a5b774b75b3da7c55329d6a2e9a5c873b443144 (diff) |
2009-10-08 Atsushi Enomoto <atsushi@ximian.com>
* JsonQueryStringConverter.cs : add custom body name support (used.
for AJAX). Handle string value (in very LAMESPEC way).
* WebMessageFormatter.cs : add custom body name support.
Slightly changed reply serialization.
Convert deserialized values using QueryStringConverter.
* WebScriptEnablingBehavior.cs : use JsonQueryStringConverter, with
"d" wrapper name. Allow only WrappedRequest.
* JsonQueryStringConverterTest.cs : added some string deserialization
test. It just proved .NET is too lame.
svn path=/trunk/mcs/; revision=143747
Diffstat (limited to 'mcs/class/System.ServiceModel.Web/System.ServiceModel.Dispatcher/WebMessageFormatter.cs')
-rw-r--r-- | mcs/class/System.ServiceModel.Web/System.ServiceModel.Dispatcher/WebMessageFormatter.cs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/mcs/class/System.ServiceModel.Web/System.ServiceModel.Dispatcher/WebMessageFormatter.cs b/mcs/class/System.ServiceModel.Web/System.ServiceModel.Dispatcher/WebMessageFormatter.cs index 60b24e49381..90a49d4de18 100644 --- a/mcs/class/System.ServiceModel.Web/System.ServiceModel.Dispatcher/WebMessageFormatter.cs +++ b/mcs/class/System.ServiceModel.Web/System.ServiceModel.Dispatcher/WebMessageFormatter.cs @@ -55,6 +55,10 @@ namespace System.ServiceModel.Description this.converter = converter; this.behavior = behavior; ApplyWebAttribute (); + // This is a hack for WebScriptEnablingBehavior + var jqc = converter as JsonQueryStringConverter; + if (jqc != null) + BodyName = jqc.CustomWrapperName; } void ApplyWebAttribute () @@ -73,6 +77,8 @@ namespace System.ServiceModel.Description template = info.BuildUriTemplate (Operation, GetMessageDescription (MessageDirection.Input)); } + public string BodyName { get; set; } + public WebHttpBehavior Behavior { get { return behavior; } } @@ -92,7 +98,7 @@ namespace System.ServiceModel.Description case WebMessageBodyStyle.WrappedResponse: return true; } - return false; + return BodyName != null; } } @@ -151,7 +157,7 @@ namespace System.ServiceModel.Description break; case WebContentFormat.Json: if (IsResponseBodyWrapped) - return GetSerializer (ref json_serializer, p => new DataContractJsonSerializer (p.Type, p.Name)); + return GetSerializer (ref json_serializer, p => new DataContractJsonSerializer (p.Type, BodyName ?? p.Name)); else return GetSerializer (ref json_serializer, p => new DataContractJsonSerializer (p.Type)); break; @@ -341,15 +347,13 @@ namespace System.ServiceModel.Description void WriteJsonBodyContents (XmlDictionaryWriter writer) { - writer.WriteStartElement ("root"); if (name != null) { + writer.WriteStartElement ("root"); writer.WriteAttributeString ("type", "object"); - writer.WriteStartElement (name, ns); } - serializer.WriteObjectContent (writer, value); + serializer.WriteObject (writer, value); if (name != null) writer.WriteEndElement (); - writer.WriteEndElement (); } void WriteXmlBodyContents (XmlDictionaryWriter writer) @@ -412,7 +416,7 @@ namespace System.ServiceModel.Description case WebMessageFormat.Json: serializer = GetSerializer (WebContentFormat.Json); mediaType = "application/json"; - name = IsResponseBodyWrapped ? md.Body.ReturnValue.Name : null; + name = IsResponseBodyWrapped ? (BodyName ?? md.Body.ReturnValue.Name) : null; ns = String.Empty; break; } @@ -460,7 +464,8 @@ namespace System.ServiceModel.Description for (int i = 0; i < parameters.Length; i++) { var p = md.Body.Parts [i]; string name = p.Name.ToUpperInvariant (); - parameters [i] = match.BoundVariables [name]; + var str = match.BoundVariables [name]; + parameters [i] = Converter.ConvertStringToValue (str, p.Type); } } } |