title: Newtonsoft JSON.net deserialization error where fields in JSON change order
body: <p>This is a WCF service getting requests from android devices. 
  Same request works from Lollipop devices, not from jellybean devices, because jellybean arranges the JSON differently on creation.</p>
  
  <p>The exception:</p>
  
  <blockquote>
    <p><em>Unexpected token when deserializing object: String. Path 'SearchFilters.config.$type', line 1, position 212.</em></p>
  </blockquote>
  
  <p>Non working Json: </p>
  
  <pre><code>{
      "DeviceType": 2,
      "SearchFilters": {
          "config": {
              "$values": [
                  {
                      "Collection": {
                          "DeviceType": 2
                      },
                      "Category": ""
                  }
              ],
              "$type": "System.Collections.Generic.List`1[[Yoosh.SharedClasses.YooshConfig, YooshSharedClassesDll]], mscorlib"
          }
      },
      "RequestingUserId": "66666666-6666-6666-6666-666666666666",
      "APIKey": "xxx"
  }
  </code></pre>
  
  <p>Working Json:</p>
  
  <pre><code>{
      "APIKey": "xxx",
      "DeviceType": 2,
      "RequestingUserId": "66666666-6666-6666-6666-666666666666",
      "SearchFilters": {
          "config": {
              "$type": "System.Collections.Generic.List`1[[Yoosh.SharedClasses.YooshConfig, YooshSharedClassesDll]], mscorlib",
              "$values": [
                  {
                      "Category": "",
                      "Collection": {
                          "DeviceType": 2
                      }
                  }
              ]
          }
      }
  }
  </code></pre>
  
  <p>Some fields are in a different order.. Thats the only difference.</p>
  
  <p>The C# class: </p>
  
  <pre><code>public class QueryParameters 
  {
      BaseParameters m_baseParameters;
      Guid m_gRequestingUserId;
      Dictionary&lt;string, object&gt; m_SearchFilters;
  
      [DataMember]
      public  string APIKey
      {
          get { return m_baseParameters.APIKey; }
          set { m_baseParameters.APIKey = value; }
      }
  
      [DataMember]
      public  BaseParameters.YooshDeviceType DeviceType
      {
          get { return m_baseParameters.DeviceType; }
          set { m_baseParameters.DeviceType = value; }
      }
  
      [DataMember]
      public  string DeviceId
      {
          get { return m_baseParameters.DeviceId; }
          set { m_baseParameters.DeviceId = value; }
      }
  
      [DataMember]
      public Guid RequestingUserId
      {
          get { return m_gRequestingUserId; }
          set { m_gRequestingUserId = value; }
      }
  
      [DataMember]
      public Dictionary&lt;string, object&gt; SearchFilters
      {
         get { return m_SearchFilters; }
          set { m_SearchFilters = value; }
      }
  }
  </code></pre>
  
  <p>Json.net version: 6.0.8</p>