Using JsonConverter on simple values C# with Example



Using JsonConverter on simple values C# with Example

Example using JsonCoverter to deserialize the runtime property from the api response into a Timespan Object in 
the Movies model 
JSON (http://www.omdbapi.com/?i=tt1663662) 
{ 
Title: "Pacific Rim", 
Year: "2013", 
Rated: "PG-13", 
Released: "12 Jul 2013", 
Runtime: "131 min", 
Genre: "Action, Adventure, Sci-Fi", 
Director: "Guillermo del Toro", 
Writer: "Travis Beacham (screenplay), Guillermo del Toro (screenplay), Travis Beacham (story)", 
Actors: "Charlie Hunnam, Diego Klattenhoff, Idris Elba, Rinko Kikuchi", 
Plot: "As a war between humankind and monstrous sea creatures wages on, a former pilot and a 
trainee are paired up to drive a seemingly obsolete special weapon in a desperate effort to save 
the world from the apocalypse.", 
Language: "English, Japanese, Cantonese, Mandarin", 
Country: "USA", 
Awards: "Nominated for 1 BAFTA Film Award. Another 6 wins & 46 nominations.", 
Poster: 
"https://images-na.ssl-images-amazon.com/images/M/MV5BMTY3MTI5NjQ4Nl5BMl5BanBnXkFtZTcwOTU1OTU0OQ@@. 
_V1_SX300.jpg", 
Ratings: [{ 
Source: "Internet Movie Database", 
Value: "7.0/10" 
}, 
{ 
Source: "Rotten Tomatoes", 
Value: "71%" 
}, 
{ 
Source: "Metacritic", 
Value: "64/100" 
} 
], 
Metascore: "64", 
imdbRating: "7.0", 
imdbVotes: "398,198", 
imdbID: "tt1663662", 
Type: "movie", 
DVD: "15 Oct 2013", 
BoxOffice: "$101,785,482.00", 
Production: "Warner Bros. Pictures", 
Website: "http://pacificrimmovie.com", 
Response: "True" 
} 
Movie Model 
using Project.Serializers; 
using Newtonsoft.Json; 
using System; 
using System.Collections.Generic; 
 

using System.Linq; 
using System.Runtime.Serialization; 
using System.Threading.Tasks; 
namespace Project.Models 
{ 
[DataContract] 
public class Movie 
{ 
public Movie() { } 
[DataMember] 
public int Id { get; set; } 
[DataMember] 
public string ImdbId { get; set; } 
[DataMember] 
public string Title { get; set; } 
[DataMember] 
public DateTime Released { get; set; } 
[DataMember] 
[JsonConverter(typeof(RuntimeSerializer))] 
public TimeSpan Runtime { get; set; } 
} 
} 
RuntimeSerializer 
using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text.RegularExpressions; 
using System.Threading.Tasks; 
namespace Project.Serializers 
{ 
public class RuntimeSerializer : JsonConverter 
{ 
public override bool CanConvert(Type objectType) 
{ 
return objectType == typeof(TimeSpan); 
} 
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, 
JsonSerializer serializer) 
{ 
if (reader.TokenType == JsonToken.Null) 
return null; 
JToken jt = JToken.Load(reader); 
String value = jt.Value(); 
Regex rx = new Regex("(\\s*)min$"); 
value = rx.Replace(value, (m) => ""); 
int timespanMin; 
if(!Int32.TryParse(value, out timespanMin)) 
 

{ 
throw new NotSupportedException(); 
} 
return new TimeSpan(0, timespanMin, 0); 
} 
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
{ 
serializer.Serialize(writer, value); 
} 
} 
} 
Calling It 
Movie m = JsonConvert.DeserializeObject(apiResponse)); 

0 Comment's

Comment Form

Submit Comment