Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on May 3rd, 2012  |  syntax: C#  |  size: 2.02 KB  |  views: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. public class JsonNetFormatter : MediaTypeFormatter
  2.         {
  3.                 private JsonSerializerSettings _jsonSerializerSettings;
  4.  
  5.                 /// <summary>
  6.                 /// Initialises a new instance using the default JsonSerializerSettings
  7.                 /// </summary>
  8.                 public JsonNetFormatter()
  9.                         : this(null)
  10.                 {
  11.                 }
  12.  
  13.                 public JsonNetFormatter(JsonSerializerSettings jsonSerializerSettings)
  14.                 {
  15.                         _jsonSerializerSettings = jsonSerializerSettings ?? new JsonSerializerSettings();
  16.  
  17.                         // Fill out the mediatype and encoding we support
  18.                         SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
  19.                         Encoding = new UTF8Encoding(false, true);
  20.                 }
  21.  
  22.                 protected override bool CanReadType(Type type)
  23.                 {
  24.                         if (type == typeof(IKeyValueModel))
  25.                         {
  26.                                 return false;
  27.                         }
  28.  
  29.                         return true;
  30.                 }
  31.  
  32.                 protected override bool CanWriteType(Type type)
  33.                 {
  34.                         return true;
  35.                 }
  36.  
  37.                 protected override Task<object> OnReadFromStreamAsync(Type type, Stream stream, HttpContentHeaders contentHeaders, FormatterContext formatterContext)
  38.                 {
  39.                         // Create a serializer
  40.                         var serializer = JsonSerializer.Create(_jsonSerializerSettings);
  41.  
  42.                         // Create task reading the content
  43.                         return Task.Factory.StartNew(() =>
  44.                         {
  45.                                 using (var streamReader = new StreamReader(stream, Encoding))
  46.                                 {
  47.                                         using (var jsonTextReader = new JsonTextReader(streamReader))
  48.                                         {
  49.                                                 return serializer.Deserialize(jsonTextReader, type);
  50.                                         }
  51.                                 }
  52.                         });
  53.                 }
  54.  
  55.                 protected override Task OnWriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, FormatterContext formatterContext, System.Net.TransportContext transportContext)
  56.                 {
  57.                         // Create a serializer
  58.                         var serializer = JsonSerializer.Create(_jsonSerializerSettings);
  59.  
  60.                         // Create task writing the serialized content
  61.                         return Task.Factory.StartNew(() =>
  62.                         {
  63.                                 using (var jsonTextWriter = new JsonTextWriter(new StreamWriter(stream, Encoding)) { CloseOutput = false })
  64.                                 {
  65.                                         serializer.Serialize(jsonTextWriter, value);
  66.                                         jsonTextWriter.Flush();
  67.                                 }
  68.                         });    
  69.                 }
  70.         }