title: WCF Complex JSON INPUT Error (not convertible by QueryStringConverter)
body: <p>Im having issue geting Complex JSON working as a parameter in my WCF Service.</p>
  
  <p>Using, Microsoft.Net 3.5 SP1 in Visual Studio 2008 SP1</p>
  
  <p>With the following Contract:</p>
  
  <pre><code>[ServiceContract]
  public interface IService1
  {
  
      [OperationContract]
      [WebGet(UriTemplate="GetDataUsingDataContract?composite={composite}", 
          BodyStyle=WebMessageBodyStyle.Wrapped, 
          RequestFormat=WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
      CompositeType GetDataUsingDataContract(CompositeType composite);
  
      // TODO: Add your service operations here
  }
  
  // Use a data contract as illustrated in the sample below to add composite types to service operations
  [DataContract]
  public class CompositeType
  {
      string boolValue = "true";
      string stringValue = "Hello ";
  
      [DataMember]
      public string BoolValue
      {
          get { return boolValue; }
          set { boolValue = value; }
      }
  
      [DataMember]
      public string StringValue
      {
          get { return stringValue; }
          set { stringValue = value; }
      }
  }
  </code></pre>
  
  <p>Using the following URL:</p>
  
  <pre><code>http://localhost:1122/Service1.svc/GetDataUsingDataContract?composite={"BoolValue":"True","StringValue":"Hello"}
  </code></pre>
  
  <p>With the Enpoint Configuration:</p>
  
  <pre><code>&lt;system.serviceModel&gt;
      &lt;services&gt;
          &lt;service name="WebHTTPBindingExample.Service1" behaviorConfiguration="WebHTTPBindingExample.Service1Behavior"&gt;
              &lt;host&gt;
                  &lt;baseAddresses&gt;
                      &lt;add baseAddress="http://localhost:8731/Design_Time_Addresses/WebHTTPBindingExample/Service1/"/&gt;
                  &lt;/baseAddresses&gt;
              &lt;/host&gt;
              &lt;!-- Service Endpoints --&gt;
              &lt;!-- Unless fully qualified, address is relative to base address supplied above --&gt;
              &lt;!--&lt;endpoint address="" binding="wsHttpBinding" contract="WebHTTPBindingExample.IService1"&gt;
                  --&gt;&lt;!-- 
        Upon deployment, the following identity element should be removed or replaced to reflect the 
        identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
        automatically.
    --&gt;&lt;!--
                  &lt;identity&gt;
                      &lt;dns value="localhost"/&gt;
                  &lt;/identity&gt;
              &lt;/endpoint&gt;--&gt;
              &lt;endpoint address="Web" behaviorConfiguration="ChatAspNetAjaxBehavior" binding="webHttpBinding" name="ajaxEndpoint" contract="WebHTTPBindingExample.IService1"/&gt;
              &lt;!-- Metadata Endpoints --&gt;
              &lt;!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. --&gt;
              &lt;!-- This endpoint does not use a secure binding and should be secured or removed before deployment --&gt;
              &lt;endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/&gt;
          &lt;/service&gt;
      &lt;/services&gt;
      &lt;behaviors&gt;
          &lt;serviceBehaviors&gt;
              &lt;behavior name="WebHTTPBindingExample.Service1Behavior"&gt;
                  &lt;!-- To avoid disclosing metadata information, 
    set the value below to false and remove the metadata endpoint above before deployment --&gt;
                  &lt;serviceMetadata httpGetEnabled="True"/&gt;
                  &lt;!-- To receive exception details in faults for debugging purposes, 
    set the value below to true.  Set to false before deployment 
    to avoid disclosing exception information --&gt;
                  &lt;serviceDebug includeExceptionDetailInFaults="False"/&gt;
              &lt;/behavior&gt;
          &lt;/serviceBehaviors&gt;
          &lt;endpointBehaviors&gt;
              &lt;behavior name="ChatAspNetAjaxBehavior"&gt;
                  &lt;webHttp/&gt;
              &lt;/behavior&gt;
          &lt;/endpointBehaviors&gt;
      &lt;/behaviors&gt;
  &lt;/system.serviceModel&gt;
  </code></pre>
  
  <p>I Get the follwoing Error:</p>
  
  <pre><code>Operation 'GetDataUsingDataContract' in contract 'IService1' has a query variable named 'composite' of type 'WebHTTPBindingExample.CompositeType', but type 'WebHTTPBindingExample.CompositeType' is not convertible by 'QueryStringConverter'.  Variables for UriTemplate query values must have types that can be converted by 'QueryStringConverter'.
  </code></pre>