public void TestJsonIsParsedCorrectly() { // Good JSON :) string json = "{\"type\":\"FeatureCollection\",\"features\":[" + "{\"type\":\"Feature\",\"id\":\"quake.2012p904860\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[172.8091,-43.451538]},\"geometry_name\":\"origin_geom\",\"properties\":{\"publicid\":\"2012p904860\",\"origintime\":\"2012-11-30 19:09:43.244000\",\"depth\":10.039062,\"magnitude\":3.2373073,\"status\":\"reviewed\",\"agency\":\"WEL(GNS_Primary)\",\"updatetime\":\"2012-11-30 19:30:58.437000\"}}," + "{\"type\":\"Feature\",\"id\":\"quake.2012p904809\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[177.92297,-38.60341]},\"geometry_name\":\"origin_geom\",\"properties\":{\"publicid\":\"2012p904809\",\"origintime\":\"2012-11-30 18:42:35.602000\",\"depth\":11.972656,\"magnitude\":2.3260586,\"status\":\"reviewed\",\"agency\":\"WEL(GNS_Primary)\",\"updatetime\":\"2012-11-30 19:44:28.653000\"}}," + "{\"type\":\"Feature\",\"id\":\"quake.2012p904425\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[175.57617,-39.639915]},\"geometry_name\":\"origin_geom\",\"properties\":{\"publicid\":\"2012p904425\",\"origintime\":\"2012-11-30 15:17:55.860000\",\"depth\":22.929688,\"magnitude\":3.1758049,\"status\":\"reviewed\",\"agency\":\"WEL(GNS_Primary)\",\"updatetime\":\"2012-11-30 19:41:05.659000\"}}" + "],\"crs\":{\"type\":\"EPSG\",\"properties\":{\"code\":\"4326\"}}}"; GeonetJsonParser parser = new GeonetJsonParser(); var quakeCollection = parser.ParseJsonToQuakes(json); var quakes = new List<Earthquake>(quakeCollection); Assert.AreEqual(3, quakes.Count); var quake = quakes[0]; /* * "{\"type\":\"Feature\",\"id\":\"quake.2012p904860\",\"geometry\": * {\"type\":\"Point\", * \"coordinates\":[172.8091,-43.451538]}, * \"geometry_name\":\"origin_geom\", * \"properties\": * {\"publicid\":\"2012p904860\", * \"origintime\":\"2012-11-30 19:09:43.244000\", * \"depth\":10.039062, * \"magnitude\":3.2373073, * \"status\":\"reviewed\", * \"agency\":\"WEL(GNS_Primary)\", * \"updatetime\":\"2012-11-30 19:30:58.437000\"}},"*/ Assert.AreEqual("WEL(GNS_Primary)", quake.Agency); Assert.AreEqual(new DateTime(2012, 11, 30, 19, 09, 43, 244, DateTimeKind.Utc), quake.Date.ToUniversalTime()); Assert.AreEqual(10.0, quake.Depth); Assert.AreEqual(new GeoCoordinate(-43.451538, 172.8091).Latitude, quake.Location.Latitude); Assert.AreEqual(new GeoCoordinate(-43.451538, 172.8091).Longitude, quake.Location.Longitude); Assert.AreEqual(3.2, quake.Magnitude); Assert.AreEqual("2012p904860", quake.Reference); Assert.AreEqual("reviewed", quake.Status); }
public void TestBadJsonThrowsJsonException() { // Incomplete JSON string json = "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"id\":\"quake.2012p904860\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[172.8091,-43.451538]},\"geometry_name\":\"origin_geom\",\"properties\":{\"publicid\":\"2012p904860\",\"origintime\":\"2012-11-30 19:09:43.244000\",\"depth\":10.039062,\"magnitude\":3.2373073,\"status\":\"reviewed\",\"agency\":\"WEL(GNS_Primary)\",\"updatetime\":\"2012-11-30 19:30:58.437000\"}}"; GeonetJsonParser parser = new GeonetJsonParser(); try { var quakes = parser.ParseJsonToQuakes(json); } catch (JsonException e) { // We're expecting a JsonException, so this is good. } catch (Exception e) { // We want to fail on any other kind of exception. Assert.Fail(); } }
void ProcessResponse(IAsyncResult result) { IHttpWebRequest request = result.AsyncState as IHttpWebRequest; string responseJson = ""; if (request != null) { try { var response = request.EndGetResponse(result); using (var stream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(stream)) { responseJson = reader.ReadToEnd(); } } } catch (WebException) { Completed(null, GeonetSuccessStatus.NetworkFailure); return; } } IEnumerable<Earthquake> quakes; if (!string.IsNullOrEmpty(responseJson)) { try { GeonetJsonParser jsonParser = new GeonetJsonParser(); quakes = jsonParser.ParseJsonToQuakes(responseJson); Completed(quakes, GeonetSuccessStatus.Success); } catch (JsonException e) { Completed(null, GeonetSuccessStatus.BadGeonetData); } } else { Completed(null, GeonetSuccessStatus.NoGeonetData); } }