元素':item'包含映射到名称的类型的数据 “http://schemas.microsoft.com/search/local/ws/rest/v1:Route“。该 反序列化器不知道映射到此名称的任何类型。 考虑使用DataContractResolver或添加对应的类型 '路由'到已知类型列表 - 例如,通过使用 KnownTypeAttribute属性或通过将其添加到已知列表中 传递给DataContractSerializer的类型。
添加[DataContract(Namespace =“http://schemas.microsoft.com/search/local/ws/rest/v1”,Name =“Location”)] ro资源类后,我遇到了这个例外:
期待状态'元素'..遇到'文字',名称为'',名称空间''
[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
],
答案 0 :(得分:0)
请看一下这篇博文:http://rbrundritt.wordpress.com/2012/01/06/bing-maps-rest-service-net-libraries/
它包含了序列化REST服务所需的所有库。对于您看到的错误,您需要创建一个名为Route的类,并将其标记为资源类上的已知类型。
例如:
[DataContract]
[KnownType(typeof(Location))]
[KnownType(typeof(Route))]
public class Resource