Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class JsonNetFormatter : MediaTypeFormatter
- {
- private JsonSerializerSettings _jsonSerializerSettings;
- /// <summary>
- /// Initialises a new instance using the default JsonSerializerSettings
- /// </summary>
- public JsonNetFormatter()
- : this(null)
- {
- }
- public JsonNetFormatter(JsonSerializerSettings jsonSerializerSettings)
- {
- _jsonSerializerSettings = jsonSerializerSettings ?? new JsonSerializerSettings();
- // Fill out the mediatype and encoding we support
- SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
- Encoding = new UTF8Encoding(false, true);
- }
- protected override bool CanReadType(Type type)
- {
- if (type == typeof(IKeyValueModel))
- {
- return false;
- }
- return true;
- }
- protected override bool CanWriteType(Type type)
- {
- return true;
- }
- protected override Task<object> OnReadFromStreamAsync(Type type, Stream stream, HttpContentHeaders contentHeaders, FormatterContext formatterContext)
- {
- // Create a serializer
- var serializer = JsonSerializer.Create(_jsonSerializerSettings);
- // Create task reading the content
- return Task.Factory.StartNew(() =>
- {
- using (var streamReader = new StreamReader(stream, Encoding))
- {
- using (var jsonTextReader = new JsonTextReader(streamReader))
- {
- return serializer.Deserialize(jsonTextReader, type);
- }
- }
- });
- }
- protected override Task OnWriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, FormatterContext formatterContext, System.Net.TransportContext transportContext)
- {
- // Create a serializer
- var serializer = JsonSerializer.Create(_jsonSerializerSettings);
- // Create task writing the serialized content
- return Task.Factory.StartNew(() =>
- {
- using (var jsonTextWriter = new JsonTextWriter(new StreamWriter(stream, Encoding)) { CloseOutput = false })
- {
- serializer.Serialize(jsonTextWriter, value);
- jsonTextWriter.Flush();
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement