Tim has summarized
that both JSON and XML has their unique place. JSON encoded data has smaller
wire footprint and is easier to convert back into Javascript objects using
javascript:eval function so it’s generally favoured in AJAX scenarios. I was
asked about WCF encoding performance for JSON and XML (text). My initial guess
was there shouldn’t be much difference in encoding performance so to validate
my assumption I wrote following code to test the encoding performance and
indeed it’s roughly the same.
To encode same message 300000 times it took following
number of ticks (roughly equal).
XML encoding
ticks = 63810463
JSON encoding
ticks = 68490315
I used following code in my testing.
namespace encodingPerformance
{
[DataContract]
public
class Data
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Address
{ get; set; }
[DataMember]
public double Salary
{ get; set; }
[DataMember]
public string Email {
get; set; }
[DataMember]
public string
SpouseName { get; set;
}
[DataMember]
public int
FamilyCount { get; set;
}
[DataMember]
public int Age { get; set; }
}
class
Program
{
static void Main(string[] args)
{
var d = new Data
{
Address = "15 ********* aveneu.",
Age = 29,
Email = "uzhadaf@ gamicl.com",
FamilyCount = 3,
Name = "******* rAhmeD2",
Salary = 111212121.121,
SpouseName = "Sigrasdf"
};
const int ITER
= 3000000;
var ms = new MemoryStream();
var tbe = new TextMessageEncodingBindingElement();
tbe.MessageVersion = MessageVersion.None;
var msg = Message.CreateMessage(MessageVersion.None, "",
d);
var buf = msg.CreateBufferedCopy(int.MaxValue);
var sw = Stopwatch.StartNew();
for (int
i = 0; i < ITER; i++)
{
msg = buf.CreateMessage();
tbe.CreateMessageEncoderFactory().Encoder.WriteMessage(msg, ms);
ms.Seek(0, SeekOrigin.Begin);
}
sw.Stop();
Console.WriteLine("XML
encoding ticks = {0} ", sw.ElapsedTicks);
msg = Message.CreateMessage(MessageVersion.None, "",
d, new DataContractJsonSerializer(typeof(Data)));
buf = msg.CreateBufferedCopy(int.MaxValue);
var wbe = new WebMessageEncodingBindingElement();
var prop = new WebBodyFormatMessageProperty(WebContentFormat.Json);
// measure JSON encoding time....
sw = Stopwatch.StartNew();
for (int
i = 0; i < ITER; i++)
{
msg = buf.CreateMessage();
msg.Properties.Add(WebBodyFormatMessageProperty.Name,
prop); //JSON encode
wbe.CreateMessageEncoderFactory().Encoder.WriteMessage(msg, ms);
ms.Seek(0, SeekOrigin.Begin);
}
sw.Stop();
Console.WriteLine("JON
encoding ticks = {0} ", sw.ElapsedTicks);
}
}
}