0

要素 ':item' には、名前 "http://schemas.microsoft.com/search/local/ws/rest/v1:Route." にマップされる型のデータが含まれています。The deserializer has no knowledge of any type that maps to this name. DataContractResolver の使用を検討するか、'Route' に対応する型を既知の型のリストに追加してください。たとえば、KnownTypeAttribute 属性を使用するか、既知の型のリストに追加します。 DataContractSerializer に渡される型。


[DataContract(Namespace = "http://schemas.microsoft.com/search/local/ws/rest/v1", Name = "Location")] ro Resource クラスを追加した後、次の例外が発生しました。

状態 'Element' を予期しています.. 名前 ''、名前空間 '' の 'Text' が見つかりました


リンク: http://dev.virtualearth.net/REST/V1/Routes?wp.0=37.779160067439079,-122.42004945874214&wp.1=32.715685218572617,-117.16172486543655&key=BingMaps

    [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
      ],
4

1 に答える 1

0

このブログ投稿をご覧ください: http://rbrandritt.wordpress.com/2012/01/06/bing-maps-rest-service-net-libraries/

REST サービスをシリアル化するために必要なすべてのライブラリが含まれています。表示されているエラーについては、Route というクラスを作成し、リソース クラスで既知のタイプとしてマークする必要があります。

例えば:

[DataContract]
[KnownType(typeof(Location))]
[KnownType(typeof(Route))]
public class Resource
于 2012-09-01T12:12:14.403 に答える