Skip to content

Commit 7b96c46

Browse files
committed
Small change in the formatters.
1 parent 082cff9 commit 7b96c46

File tree

4 files changed

+64
-21
lines changed

4 files changed

+64
-21
lines changed

Mvc.Datatables.Sample.New/App_Start/WebApiConfig.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Mvc.Datatables.Formatters;
2-
using Mvc.Datatables.Serialization;
32
using Newtonsoft.Json;
43
using System.Net.Http.Formatting;
54
using System.Web.Http;
@@ -21,12 +20,8 @@ public static void Register(HttpConfiguration config)
2120
defaults: new { id = RouteParameter.Optional }
2221
);
2322

24-
// Replace default json converter
25-
config.Formatters.Clear();
26-
config.Formatters.Add(new JsonMediaTypeFormatter());
27-
config.Formatters.Add(new DatatablesMediaTypeFormatter());
28-
config.Formatters.Add(new XmlMediaTypeFormatter());
29-
config.Formatters.Add(new FormUrlEncodedMediaTypeFormatter());
23+
// Add a custom formatter
24+
config.Formatters.Insert(0, new DatatablesMediaTypeFormatter());
3025

3126
// Add a custom converter
3227
foreach (var formatter in GlobalConfiguration.Configuration.Formatters)

Mvc.Datatables/Formatters/DatatablesMediaTypeFormatter.cs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
using Mvc.Datatables.Serialization;
22
using Newtonsoft.Json;
3+
using Newtonsoft.Json.Converters;
34
using System;
45
using System.IO;
56
using System.Net;
67
using System.Net.Http;
78
using System.Net.Http.Formatting;
89
using System.Net.Http.Headers;
10+
using System.Text;
911
using System.Threading.Tasks;
1012

1113
namespace Mvc.Datatables.Formatters
@@ -27,8 +29,10 @@ public DatatablesMediaTypeFormatter()
2729

2830
this.SerializerSettings.Converters.Add(new FilterRequestConverter());
2931
this.SerializerSettings.Converters.Add(new PageResponseConverter());
32+
this.SerializerSettings.Converters.Add(new StringEnumConverter());
3033

3134
this.SerializerSettings.Formatting = Formatting.Indented;
35+
this.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
3236
}
3337

3438
public new static MediaTypeHeaderValue DefaultMediaType
@@ -64,12 +68,32 @@ public override bool CanWriteType(Type type)
6468

6569
public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
6670
{
67-
return base.ReadFromStreamAsync(type, readStream, content, formatterLogger);
71+
var task = Task<object>.Factory.StartNew(() =>
72+
{
73+
var sr = new StreamReader(readStream);
74+
var jreader = new JsonTextReader(sr);
75+
76+
var ser = JsonSerializer.Create(this.SerializerSettings);
77+
78+
object val = ser.Deserialize(jreader, type);
79+
return val;
80+
});
81+
82+
return task;
6883
}
6984

7085
public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext)
7186
{
72-
return base.WriteToStreamAsync(type, value, writeStream, content, transportContext);
87+
var task = Task.Factory.StartNew(() =>
88+
{
89+
string json = JsonConvert.SerializeObject(value, this.SerializerSettings);
90+
91+
byte[] buf = Encoding.Default.GetBytes(json);
92+
writeStream.Write(buf, 0, buf.Length);
93+
writeStream.Flush();
94+
});
95+
96+
return task;
7397
}
7498
}
7599
}

Mvc.Datatables/Formatters/LegacyDatatablesMediaTypeFormatter.cs

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
using Mvc.Datatables.Serialization;
2+
using Newtonsoft.Json;
3+
using Newtonsoft.Json.Converters;
24
using System;
35
using System.IO;
46
using System.Net;
57
using System.Net.Http;
68
using System.Net.Http.Formatting;
79
using System.Net.Http.Headers;
10+
using System.Text;
811
using System.Threading.Tasks;
9-
using Newtonsoft.Json;
1012

1113
namespace Mvc.Datatables.Formatters
1214
{
@@ -27,8 +29,10 @@ public LegacyDatatablesMediaTypeFormatter()
2729

2830
this.SerializerSettings.Converters.Add(new LegacyFilterRequestConverter());
2931
this.SerializerSettings.Converters.Add(new LegacyPageResponseConverter());
32+
this.SerializerSettings.Converters.Add(new StringEnumConverter());
3033

31-
this.SerializerSettings.Formatting = Formatting.Indented;
34+
this.SerializerSettings.Formatting = Formatting.Indented;
35+
this.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
3236
}
3337

3438
public new static MediaTypeHeaderValue DefaultMediaType
@@ -62,14 +66,34 @@ public override bool CanWriteType(Type type)
6266
return false;
6367
}
6468

65-
public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
66-
{
67-
return base.ReadFromStreamAsync(type, readStream, content, formatterLogger);
68-
}
69+
public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
70+
{
71+
var task = Task<object>.Factory.StartNew(() =>
72+
{
73+
var sr = new StreamReader(readStream);
74+
var jreader = new JsonTextReader(sr);
6975

70-
public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext)
71-
{
72-
return base.WriteToStreamAsync(type, value, writeStream, content, transportContext);
73-
}
76+
var ser = JsonSerializer.Create(this.SerializerSettings);
77+
78+
object val = ser.Deserialize(jreader, type);
79+
return val;
80+
});
81+
82+
return task;
83+
}
84+
85+
public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext)
86+
{
87+
var task = Task.Factory.StartNew(() =>
88+
{
89+
string json = JsonConvert.SerializeObject(value, this.SerializerSettings);
90+
91+
byte[] buf = Encoding.Default.GetBytes(json);
92+
writeStream.Write(buf, 0, buf.Length);
93+
writeStream.Flush();
94+
});
95+
96+
return task;
97+
}
7498
}
7599
}

Mvc.Datatables/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@
3030
//
3131
// You can specify all the values or you can default the Revision and Build Numbers
3232
// by using the '*' as shown below:
33-
[assembly: AssemblyVersion("1.0.0.2")]
34-
[assembly: AssemblyFileVersion("1.0.0.2")]
33+
[assembly: AssemblyVersion("1.0.0.3")]
34+
[assembly: AssemblyFileVersion("1.0.0.3")]

0 commit comments

Comments
 (0)