Элемент ': item' содержит данные из типа, который сопоставляется с именем 'http: // ...: Location'. Десериализатор не знает ни одного типа, который сопоставляется с этим - PullRequest
2 голосов
/ 14 июля 2011

Я пишу код для использования службы Bing Geocode (Bing Maps), и я успешно могу получать данные JSON через wcf, к сожалению, мне не удается отобразить часть возвращенных данных.

Я создал все соответствующие DataContracts по мере необходимости и заполнил их необходимыми членами, но когда я начинаю попадать в дочерние элементы, я получаю следующую ошибку:

Элемент ': item' содержит данные типа, которыйсопоставляется с именем 'http://schemas.microsoft.com/search/local/ws/rest/v1:Location'. Десериализатор не знает ни одного типа, сопоставляющего это имя.Рассмотрите возможность использования DataContractResolver или добавьте тип, соответствующий «Location», в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавив его в список известных типов, передаваемых в DataContractSerializer.

Итак, язакомментировал «дочерние» объекты и в основном смог различить, что он взрывается, когда он пытается прочитать часть «Местоположение» объекта JSON

в моем коде ниже, это касается части здесь:

               "__type":"Location:http:\/\/schemas.microsoft.com\/search\/local\/ws\/rest\/v1",

за то, что это стоит, URL-адрес плохой, но мне все равно.Я не хочу использовать этот тип (который, по-видимому, отображается обратно в схему на веб-сайте Microsoft).Есть ли способ сказать WCF игнорировать эту ссылку?Это не похоже на I .

Что Bing возвращает

{
   "authenticationResultCode":"ValidCredentials",
   "brandLogoUri":"http:\/\/dev.virtualearth.net\/Branding\/logo_powered_by.png",
   "copyright":"Copyright © 2010 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.",
   "resourceSets":[
      {
         "estimatedTotal":1,
         "resources":[
            {
               "__type":"Location:http:\/\/schemas.microsoft.com\/search\/local\/ws\/rest\/v1",
               "bbox":[
                  47.635884282429323,
                  -122.13737419709076,
                  47.643609717570676,
                  -122.12208780290925
               ],
               "name":"1 Microsoft Way, Redmond, WA 98052-8300",
               "point":{
                  "type":"Point",
                  "coordinates":[
                     47.639747,
                     -122.129731
                  ]
               },
               "address":{
                  "addressLine":"1 Microsoft Way",
                  "adminDistrict":"WA",
                  "adminDistrict2":"King County",
                  "countryRegion":"United States",
                  "formattedAddress":"1 Microsoft Way, Redmond, WA 98052-8300",
                  "locality":"Redmond",
                  "postalCode":"98052-8300"
               },
               "confidence":"High",
               "entityType":"Address"
            }
         ]
      }
   ],
   "statusCode":200,
   "statusDescription":"OK",
   "traceId":"43c6a4dc130749bbb14eb72bf12c4198 "
}

1 Ответ

7 голосов
/ 14 июля 2011

Нашел это. Это потому, что мне пришлось включить ref'd __type в мой контракт данных (нужно было знать, какой тип использовать. Решение было так:

[DataContract(Namespace = "http://schemas.microsoft.com/search/local/ws/rest/v1", Name="Location")]

кстати, я нашел ответ здесь : Проблема с десериализацией JSON в столбце данных "__type"

...