- Notifications
You must be signed in to change notification settings - Fork 618
JSV Format
Type Serializer uses a hybrid CSV-style escaping + JavaScript-like text-based format that is optimized for both size and speed. I'm naming this JSV-format (i.e. JSON + CSV)
In many ways it is similar to JavaScript, e.g. any List, Array, Collection of ints, longs, etc are stored in exactly the same way, i.e: [1,2,3,4,5]
Any IDictionary is serialized like JavaScript, i.e:{A:1,B:2,C:3,D:4}
Which also happens to be the same as C# POCO class with the values
new MyClass{A=1, B=2, C=3, D=4 }
{A:1,B:2,C:3,D:4} JSV is white-space significant, which means normal string values can be serialized without quotes, e.g:
new MyClass{Foo="Bar", Greet="Hello World!"} is serialized as:
{Foo:Bar,Greet:Hello World!} Any string with any of the following characters: []{}," is escaped using CSV-style escaping where the value is wrapped in double quotes, e.g:
new MyClass{Name = "Me, Junior" } is serialized as:
{Name:"Me, Junior"} A value with a double-quote is escaped with another double quote e.g:
new MyClass{Size = "2\" x 1\"" } is serialized as:
{Size:"2"" x 1"""} The JSV Format is available in ServiceStack.Text .NET's TypeSerializer, e.g:
varjsv=TypeSerializer.SerializeToString(model);vardto=TypeSerializer.DeserializeFromString<Poco>(jsv);Or via the ToJsv/FromJsv extension methods, e.g:
varjsv=model.ToJsv();vardto=jsv.FromJsv<Poco>();Thanks to the performance benefits of JSV's CSV-style escaping, the JsvServiceClient is our fastest text-based serializer for .NET:
varclient=newJsvServiceClient(baseUrl);varresponse=client.Get(newHello{Name="World"});A JavaScript JSV parser is also available from JSV.js:
varjsv=JSV.stringify(model);vardto=JSV.parse(jsv);JSV.js also includes the JsvServiceClient for consuming JSV Services:
varclient=newJsvServiceClient(baseUrl);client.getFromService("Hello",{name: "World"},function(r){});