Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAtsushi Eno <atsushieno@gmail.com>2009-10-08 12:59:56 +0400
committerAtsushi Eno <atsushieno@gmail.com>2009-10-08 12:59:56 +0400
commitcd263cb1f496adb927884bbc5b5a56a4e9124d8a (patch)
tree969656e094feb1a86fe7e2ea4804feb10c3c9250 /mcs/class/System.ServiceModel.Web/System.ServiceModel.Dispatcher/WebMessageFormatter.cs
parent9a5b774b75b3da7c55329d6a2e9a5c873b443144 (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.cs21
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);
}
}
}