2013-04-18 9 views
7

json応答をfoursquareからオブジェクトに戻そうとしています。私は、私はまだVenuesこの私は何が欠けていますか? RestSharpはJsonを逆シリアル化しません

public class Response 
    { 
     public string Meta { get; set; } 
     public List<Venue> Venues { get; set; } 
    } 

    public class Venue 
    { 
     public string Id { get; set; } 
     public string Name { get; set; } 
     public Contact Contact { get; set; } 
     public Location Location { get; set; } 
     public string CanonicalUrl { get; set; } 
     public Categories Categories { get; set; } 
     public bool Verified { get; set; } 
    } 

var response = client.Execute<Response>(request); 
     var test = response.Data; 

のようなクラスを作っ常にnullである

{ 
    "meta":{ 
     "code":200 
    }, 
    "response":{ 
     "venues":[ 
     { 
      "id":"4abfb58ef964a520be9120e3", 
      "name":"Costco", 
      "contact":{ 
       "phone":"6045967435", 
       "formattedPhone":"(604) 596-7435" 
      }, 
      "location":{ 
       "address":"7423 King George Hwy", 
       "crossStreet":"btw 76 Avenue & 73A Avenue", 
       "lat":49.138259617056015, 
       "lng":-122.84723281860352, 
       "distance":19000, 
       "postalCode":"V3W 5A8", 
       "city":"Surrey", 
       "state":"BC", 
       "country":"Canada", 
       "cc":"CA" 
      }, 
      "canonicalUrl":"https:\/\/foursquare.com\/v\/costco\/4abfb58ef964a520be9120e3", 
      "categories":[ 
       { 
        "id":"4bf58dd8d48988d1f6941735", 
        "name":"Department Store", 
        "pluralName":"Department Stores", 
        "shortName":"Department Store", 
        "icon":{ 
        "prefix":"https:\/\/foursquare.com\/img\/categories_v2\/shops\/departmentstore_", 
        "suffix":".png" 
        }, 
        "primary":true 
       } 
      ], 
      "verified":true, 
      "restricted":true, 
      "stats":{ 
       "checkinsCount":2038, 
       "usersCount":533, 
       "tipCount":12 
      }, 
      "url":"http:\/\/www.costco.ca", 
      "specials":{ 
       "count":0, 
       "items":[ 

       ] 
      }, 
      "hereNow":{ 
       "count":0, 
       "groups":[ 

       ] 
      }, 
      "referralId":"v-1366316196" 
     } 
     ] 
    } 
} 

このような何かを取り戻します。私はなぜそう思うか分からない。

+0

chobo2、あなたのjsonは無効で、複数のフィールド間にカンマがありません。 RetSharpが正しいです。 – I4V

+0

jsonが有効であるとします。それは四角形から来ている(それは働かなければならない....)。あなたが記述している問題は、ライブツールから引用符を取り除いたものをコピーしたためです...コードによるリクエストには引用符があります。 – chobo2

答えて

17

Okこの素晴らしいツールを見つけましたjsonをオブジェクトに変換する私はこれを見て、それを動作させるためにもう一度ラッピングする必要があった。

+11

またはVisual Studioで「Edit-> Paste special-> as Json'」をクリックしてください。 – cheesemacfly

0

私は、正しい方向に向かっていた場合は、ウルJSONはValid

Error:Strings should be wrapped in double quotes 

ではありません、それはjsonformatter

を検証しなさい[UPDATED]

有効なJSONは次のようになります: -

{ 
"meta": { 
    "code": 200 
     }, 
    "notifications": 
     [ 
      { 
       "type": "notificationTray", 
       "item": { 
      "unreadCount": 0 
       } 
      } 
     ], 
    "response": { 
    "venues": [ 
     { 
      "id": "4e15d1348877cd5712112a44", 
      "name": "The Arena", 
    "contact": { }, 
    "location": { 
     "address": "110 Wall Street", 
     "lat": 40.70432634495503, 
     "lng": -74.0055421062419, 
     "distance": 671, 
     "city": "New York", 
     "state": "NY", 
     "country": "United States", 
     "cc": "US" 
    }, 
    "canonicalUrl": "https://foursquare.com/v/the-arena/4e15d1348877cd5712112a44", 
    "categories": [ 
     { 
      "id": "4bf58dd8d48988d1e4941735", 
      "name": "Campground", 
    "pluralName": "Campgrounds", 
    "shortName": "Campground", 
    "icon": { 
      "prefix": "https://foursquare.com/img/categories_v2/parks_outdoors/campground_", 
      "suffix": ".png" 
    }, 
    "primary": true 
} 
], 
"verified": false, 
"stats": { 
     "checkinsCount": 149, 
     "usersCount": 25, 
     "tipCount": 4 
}, 
"specials": { 
     "count": 0, 
     "items": [ ] 
}, 
"hereNow": { 
     "count": 0, 
     "groups": [ ] 
}, 
"referralId": "v-1366314443" 
}   
] 
} 

} 
+0

ですが、有効なjsonです。私は結果をjsonを返すオンラインツールから取り出した(https://developer.foursquare.com/docs/explore#req=venues/search%3Fll%3D40.7,-74%26groceryStoreId%3D4bf58dd8d48988d118951735)引用符をはがすようなもの。私は自分のコードに戻ってきたものを再投稿しました。 – chobo2

0

.NETオブジェクトへのJSON逆シリアル化は大文字です。プロパティ名がJSONタグと正しく一致しないため、デシリアライズしようとするとNULLが返されます。

1

JSONレスポンスのレベルを上げるだけで済みます。 venuesプロパティの1つ上のレベルは、Responseクラスでは表現されていないresponseプロパティです。

これを解決するには2通りの方法があります。

1)行方不明responseプロパティ

// this is the new wrapping object 
public class FourSquareResponse 
{ 
    public string Meta { get; set; } 
    public VenueResponse Response { get; set; } // previously missing 
} 

public class VenueResponse 
{ 
    public List<Venue> Venues { get; set; } 
} 

public class Venue 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public Contact Contact { get; set; } 
    public Location Location { get; set; } 
    public string CanonicalUrl { get; set; } 
    public Categories Categories { get; set; } 
    public bool Verified { get; set; } 
} 

、要求を実行するを含む別のラッピングレスポンスオブジェクトを、追加...

var request = new RestRequest(uri); 
var response = client.Execute<Response>(request); 

2)metaプロパティを無視しての解析を開始しますresponseプロパティ。

※JSONレスポンスのmetaプロパティがHTTPステータスコードである可能性があります。それがまだ必要な場合はRestSharpもそれを提供します(下記参照)。

ただし、RestSharpに応答の解析を開始するように指示する必要があります。

var request = new RestRequest(uri) 
{ 
    RootElement = "response" 
}; 
var response = client.Execute<Response>(request); 

// and the HTTP status (if that's what you need) 
response.StatusCode 
+0

この回答は、OPの中核的な問題に対処しています。 – wlf

関連する問題