2012-08-31 26 views
0

元素「:項目」包含映射到名稱的數據類型 「http://schemas.microsoft.com/search/local/ws/rest/V1:路線「。 解串器不知道映射到此名稱的任何類型 考慮使用DataContractResolver或將'Route'對應的類型添加到已知類型的列表中 - 例如,使用 KnownTypeAttribute屬性或將它添加到已知 類型傳遞給DataContractSerializer的列表。Metro風格應用程序:JSON對象反序列化錯誤,REST服務


加入[DataContract(命名空間= 「http://schemas.microsoft.com/search/local/ws/rest/v1」,名稱後= 「位置」)] RO資源類,我得到這個異常:

期待狀態 '元素' ..遇到名稱 '',命名空間'


Likn '文本':http://dev.virtualearth.net/REST/V1/Routes?wp.0=37.779160067439079,-122.42004945874214&wp.1=32.715685218572617,-117.16172486543655&key=BingMapsKey

[KnownType(typeof(double[]))] 
    [DataContract] 
    public class ActualEnd 
    { 
     [DataMember(Name = "type")] 
     public string type { get; set; } 
     [DataMember(Name = "coordinates")] 
     public List<double> coordinates { get; set; } 
    } 

    [KnownType(typeof(double[]))] 
    [DataContract] 
    public class ActualStart 
    { 
     [DataMember(Name = "type")] 
     public string type { get; set; } 
     [DataMember(Name = "coordinates")] 
     public List<double> 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<int> 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<int> startPathIndices { get; set; } 
     [DataMember(Name = "names")] 
     public List<string> 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<double> 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<Detail> 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<string> signs { get; set; } 
     [DataMember(Name = "hints")] 
     public List<Hint> 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<ItineraryItem> 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<double> 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<RouteLeg> 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<Resource> 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<ResourceSet> 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); 
     } 
    } 

的問題是在這裏:

"estimatedTotal": 1, 
    "resources": [ 
    { 
     "__type": "Route:http:\/\/schemas.microsoft.com\/search\/local\/ws\/rest\/v1", 
     "bbox": [ 
     32.715692, 
     -122.420697, 
     37.827532, 
     -117.161052 
     ], 

回答