0

次のコードは、ステートメントでエラーをスローします。

Result res = (Result)stdserialize.ReadObject(ms);

エラーは次のとおりです。タイプ TrackLocation.MainPage+Result のオブジェクトのデシリアライズ中にエラーが発生しました。名前空間 '' の終了要素 'types' が必要です。名前空間 '' から要素 'item' が見つかりました。

HttpClient gClientRequest = new HttpClient();
System.Uri gURI = new Uri("http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true");
HttpResponseMessage gResponse = await gClientRequest.GetAsync(gURI);
string   strStream = await gResponse.Content.ReadAsStringAsync();
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(strStream));
DataContractJsonSerializer stdserialize = new DataContractJsonSerializer(typeof(Result));
Result res = (Result)stdserialize.ReadObject(ms);

//################################################ ##############################################################

[DataContract]
public class Address
{
    [DataMember(Name = "long_name")]
    public string address1;
    [DataMember(Name = "short_name")]
    public string shortaddress;
    [DataMember(Name = "formatted_address")]
    public string formattedtaddress;
    [DataMember(Name = "lat")]
    public string latitude;
    [DataMember(Name = "long")]
    public string latitude;
}
//###############################################################################################



[DataContract]
    public class Result
    {           

        [DataMember(Name = "results")]
        public Address[] Results { get; set; }

        [DataMember(Name = "status")]
        public string Status { get; set; }
    }

    [DataContract]
    public class Address
    {
        [DataMember(Name = "formatted_address")]
        public string FormattedAddress;

        [DataMember(Name = "address_components")]
        public AddressComponent[] AddressComponents;
    }

    [DataContract]
    public class AddressComponent
    {
        [DataMember(Name = "long_name")]
        public string LongName;

        [DataMember(Name = "short_name")]
        public string ShortName;

        [DataMember(Name = "types")]
        public string Types;
    }

この問題を解決する方法を教えてください。どんな助けでも大歓迎です。

4

2 に答える 2

0

JSON を詳しく見てみましょう。TypeのフィールドはnotであるAddressComponent必要があります。string[]string

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "285",
               "short_name" : "285",
               "types" : [ "street_number" ]
            },

また、2 つのAddressクラスとresult(小文字) およびResult(大文字) クラスがあるようです。返された JSON と一致しないように見えるため、これらは切り貼りの問題であると想定しています。

于 2012-11-27T07:41:08.600 に答える
0

JSONをXMLに変換したところ、型が繰り返されることがわかりました(以下のスクリーンショットを確認してください)が、データコントラクトでは [DataMember(Name = "types")] public string Types;

これを次のように置くだけです

        [DataMember(Name = "types")]
        public string[] Types;

そしてそれはうまくいくはずです スクリーンショット

于 2012-11-27T19:19:26.353 に答える