title: Metro Style App: JSON Object Deserialization Error, REST Services
body: <blockquote>
    <p>Element ':item' contains data from a type that maps to the name
    "http://schemas.microsoft.com/search/local/ws/rest/v1:Route.' The
    deserializer has no knowledge of any type that maps to this name.
    Consider using a DataContractResolver or add the type corresponding to
    'Route' to the list of known types - for example, by using
    KnownTypeAttribute attribute or by adding it to the list of known
    types passed to DataContractSerializer.</p>
  </blockquote>
  
  <hr>
  
  <p>After adding [DataContract(Namespace = "http://schemas.microsoft.com/search/local/ws/rest/v1", Name = "Location")] ro Resource class, I got this exception:</p>
  
  <p>Expecting state 'Element'.. Encountered 'Text' with name '', namespace ''</p>
  
  <hr>
  
  <p>Likn: <a href="http://dev.virtualearth.net/REST/V1/Routes?wp.0=37.779160067439079,-122.42004945874214&amp;wp.1=32.715685218572617,-117.16172486543655&amp;key=BingMapsKey" rel="nofollow">http://dev.virtualearth.net/REST/V1/Routes?wp.0=37.779160067439079,-122.42004945874214&amp;wp.1=32.715685218572617,-117.16172486543655&amp;key=BingMapsKey</a></p>
  
  <pre><code>    [KnownType(typeof(double[]))]
      [DataContract]
      public class ActualEnd
      {
          [DataMember(Name = "type")]
          public string type { get; set; }
          [DataMember(Name = "coordinates")]
          public List&lt;double&gt; coordinates { get; set; }
      }
  
      [KnownType(typeof(double[]))]
      [DataContract]
      public class ActualStart
      {
          [DataMember(Name = "type")]
          public string type { get; set; }
          [DataMember(Name = "coordinates")]
          public List&lt;double&gt; coordinates { get; set; }
      }
  
  
      [KnownType(typeof(int[]))]
      [KnownType(typeof(string[]))]
      [DataContract]
      public class Detail
      {
          [DataMember(Name = "compassDegrees")]
          public int compassDegrees { get; set; }
          [DataMember(Name = "endPathIndices")]
          public List&lt;int&gt; endPathIndices { get; set; }
          [DataMember(Name = "maneuverType")]
          public string maneuverType { get; set; }
          [DataMember(Name = "mode")]
          public string mode { get; set; }
          [DataMember(Name = "roadType")]
          public string roadType { get; set; }
          [DataMember(Name = "startPathIndices")]
          public List&lt;int&gt; startPathIndices { get; set; }
          [DataMember(Name = "names")]
          public List&lt;string&gt; names { get; set; }
      }
  
      [DataContract]
      public class Instruction
      {
          [DataMember(Name = "maneuverType")]
          public string maneuverType { get; set; }
          [DataMember(Name = "text")]
          public string text { get; set; }
      }
  
      [KnownType(typeof(double[]))]
      [DataContract]
      public class ManeuverPoint
      {
          [DataMember(Name = "type")]
          public string type { get; set; }
          [DataMember(Name = "coordinates")]
          public List&lt;double&gt; coordinates { get; set; }
      }
  
      [DataContract]
      public class Hint
      {
          [DataMember(Name = "hintType")]
          public object hintType { get; set; }
          [DataMember(Name = "text")]
          public string text { get; set; }
      }
  
      [KnownType(typeof(Detail[]))]
      [KnownType(typeof(Instruction))]
      [KnownType(typeof(Hint[]))]
      [KnownType(typeof(ManeuverPoint))]
      [KnownType(typeof(string[]))]
      [DataContract]
      public class ItineraryItem
      {
          [DataMember(Name = "compassDirection")]
          public string compassDirection { get; set; }
          [DataMember(Name = "details")]
          public List&lt;Detail&gt; details { get; set; }
          [DataMember(Name = "exit")]
          public string exit { get; set; }
          [DataMember(Name = "iconType")]
          public string iconType { get; set; }
          [DataMember(Name = "instruction")]
          public Instruction instruction { get; set; }
          [DataMember(Name = "maneuverPoint")]
          public ManeuverPoint maneuverPoint { get; set; }
          [DataMember(Name = "sideOfStreet")]
          public string sideOfStreet { get; set; }
          [DataMember(Name = "tollZone")]
          public string tollZone { get; set; }
          [DataMember(Name = "towardsRoadName")]
          public string towardsRoadName { get; set; }
          [DataMember(Name = "transitTerminus")]
          public string transitTerminus { get; set; }
          [DataMember(Name = "travelDistance")]
          public double travelDistance { get; set; }
          [DataMember(Name = "travelDuration")]
          public int travelDuration { get; set; }
          [DataMember(Name = "travelMode")]
          public string travelMode { get; set; }
          [DataMember(Name = "signs")]
          public List&lt;string&gt; signs { get; set; }
          [DataMember(Name = "hints")]
          public List&lt;Hint&gt; hints { get; set; }
      }
  
      [KnownType(typeof(ActualEnd))]
      [KnownType(typeof(ActualStart))]
      [KnownType(typeof(ItineraryItem[]))]
      [DataContract]
      public class RouteLeg
      {
          [DataMember(Name = "actualEnd")]
          public ActualEnd actualEnd { get; set; }
          [DataMember(Name = "actualStart")]
          public ActualStart actualStart { get; set; }
          [DataMember(Name = "itineraryItems")]
          public List&lt;ItineraryItem&gt; itineraryItems { get; set; }
          [DataMember(Name = "travelDistance")]
          public double travelDistance { get; set; }
          [DataMember(Name = "travelDuration")]
          public int travelDuration { get; set; }
      }
  
  
      [KnownType(typeof(RouteLeg[]))]
      [KnownType(typeof(double[]))]
      [DataContract(Namespace = "http://schemas.microsoft.com/search/local/ws/rest/v1", Name = "Location")]
      public class Resource
      {
          [DataMember(Name = "__type")]
          public string __type { get; set; }
          [DataMember(Name = "id")]
          public List&lt;double&gt; bbox { get; set; }
          public string id { get; set; }
          [DataMember(Name = "distanceUnit")]
          public string distanceUnit { get; set; }
          [DataMember(Name = "durationUnit")]
          public string durationUnit { get; set; }
          [DataMember(Name = "routeLegs")]
          public List&lt;RouteLeg&gt; routeLegs { get; set; }
          [DataMember(Name = "travelDistance")]
          public double travelDistance { get; set; }
          [DataMember(Name = "travelDuration")]
          public int travelDuration { get; set; }
      }
  
      [KnownType(typeof(Resource[]))]
      [DataContract]
      public class ResourceSet
      {
          [DataMember(Name = "estimatedTotal")]
          public int estimatedTotal { get; set; }
          [DataMember(Name = "resources")]
          public List&lt;Resource&gt; resources { get; set; }
      }
  
      [KnownType(typeof(ResourceSet[]))]
      [DataContract]
      public class RootObject
      {
          [DataMember(Name = "authenticationResultCode")]
          public string authenticationResultCode { get; set; }
          [DataMember(Name = "brandLogoUri")]
          public string brandLogoUri { get; set; }
          [DataMember(Name = "copyright")]
          public string copyright { get; set; }
          [DataMember(Name = "resourceSets")]
          public List&lt;ResourceSet&gt; resourceSets { get; set; }
          [DataMember(Name = "statusCode")]
          public int statusCode { get; set; }
          [DataMember(Name = "statusDescription")]
          public string statusDescription { get; set; }
          [DataMember(Name = "traceId")]
          public string traceId { get; set; }
      }
  
      public async void MakeRequest(string requestUrl)
      {
          try
          {
              HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
              using (HttpWebResponse response = await request.GetResponseAsync() as HttpWebResponse)
              {
                  if (response.StatusCode != HttpStatusCode.OK)
                      throw new Exception(string.Format(
                      "Server error(HTTP {0}:{1}.",
                      response.StatusCode,
                      response.StatusDescription));
                  DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(RootObject));
                  object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
                  root = (RootObject)objResponse;      
              }
          }
          catch (Exception ex)
          {
              ThrowException(ex);
          }
      }
  </code></pre>
  
  <p>The problem is here:</p>
  
  <pre><code> "estimatedTotal": 1,
    "resources": [
      {
        "__type": "Route:http:\/\/schemas.microsoft.com\/search\/local\/ws\/rest\/v1",
        "bbox": [
          32.715692,
          -122.420697,
          37.827532,
          -117.161052
        ],
  </code></pre>