Helping understand DeserializeFromString with custom properties

I’m used to Newtonsoft.Json but to take full advantage of SS, I would love to know how to deserialize a string properly (thing that always takes me forever when using SS.Text).

I made a simple example to test, and here’s the code (runs fine on Linqpad):

void Main()
{
	var s = "[{\"r\":" +
			"	{" +
			"		\"c1\":\"2 x Udend\u00f8rs sensorlamper tr\u00e5dl\u00f8s\"," +
			"		\"c2\":\"Har du steder omkring huset hvor der er m\u00f8rkt og hvor det kunne v\u00e6re rart med noget lys uden at skulle tr\u00e6kke str\u00f8m, s\u00e5 er denne lampe lige noget for dig.Enheden s\u00e6ttes op p\u00e5 f\u00e5 minutter og kan bruges i det omr\u00e5de hvor der er brug for lys. Lampen kan justeres til kun at t\u00e6nde n\u00e5r der er brug for det og er perfekt til rundt omkring huset, garagen, sommerhuset eller andre steder hvor der er m\u00f8rkt. Den d\u00e6kker 120 grader og lyser kun n\u00e5r der er bev\u00e6gelse foran enheden og slukker derefter automatisk igen.Der medf\u00f8lger 4 x Lithium batterier som sikrer en h\u00f8j ydeevne ogs\u00e5 i koldt vejr! T\u00e6nder enheden 5 gange dagligt, vil der v\u00e6re str\u00f8m til over 2 \u00e5rs forbrug.Lamperne er vandt\u00e6t og IP44 godkendt!\"," +
			"		\"c3\":\"https://benefitclub.se/upload_dir/shop/udendoers-lameper-1.jpg\"," +
			"		\"c4\":\"https://benefitclub.se/upload_dir/users/iique.png\"," +
			"		\"c5\":\"https://benefitclub.se/shop/41-vis-alle-varer/1863-2-x-udendoers-sensorlamper-traadloes/?skiplogin\"," +
			"		\"c6\":\"599\"," +
			"		\"c7\":\"799\"," +
			"		\"c8\":\"200\"," +
			"		\"c9\":\"25%\"," +
			"		\"c10\":\"SP_33-510ILSL001\"," +
			"		\"c11\":\"Udend\u00f8rs\"," +
			"		\"c12\":\"1\"" +
			"	}" +
			"}," +
			"{" +
			"	\"r\":" +
			"	{" +
			"		\"c1\":\"Adax Computertaske i skind, Brun\"," +
			"		\"c2\":\"L\u00e6kker taske fra Adax i kraftigt skind. Tasken er enkel og elegant i designet. Den har to faste hanke i toppen, lynl\u00e5slomme p\u00e5 b\u00e5de front,- og bagside og lukkes med to lynl\u00e5se i toppen. Der medf\u00f8lger aftagelig, regulerbar rem. Tasken har i det forreste rum en mindre lynl\u00e5slonmme. I det bagerste rum, har den en polstret pc/tabletlomme, der kan rumme op til 13,3. Arbejdstasken er 30 cm h\u00f8j, 40 cm lang og 8,5 cm dyb.\"," +
			"		\"c3\":\"https://benefitclub.se/upload_dir/shop/adax-computertaske-1.jpg\"," +
			"		\"c4\":\"https://benefitclub.se/upload_dir/users/Adax-logo.png\"," +
			"		\"c5\":\"https://benefitclub.se/shop/38-vis-alle-varer/1248-adax-computertaske-i-skind/?variantId=167&skiplogin\"," +
			"		\"c6\":\"1199\"," +
			"		\"c7\":\"1799\"," +
			"		\"c8\":\"600\"," +
			"		\"c9\":\"33%\"," +
			"		\"c10\":\"SP_697452b\"," +
			"		\"c11\":\"Ham & Hende\"," +
			"		\"c12\":\"2\"" +
			"    }" +
			"}]";


	var dlist = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SPProductJson>>(s);
	
	var dlist2 = ServiceStack.Text.JsonObject.ParseArray(s);
	var dlist3 = ServiceStack.Text.JsonSerializer.DeserializeFromString<IEnumerable<SPProductJson>>(s);
	
	dlist.Dump("Newtonsoft");
	dlist3.Dump("ServiceStack JsonObject");
	dlist3.Dump("ServiceStack JsonSerializer");
}


public class SPProduct
{
	[System.Runtime.Serialization.DataMember(Name = "C1")]
	[Newtonsoft.Json.JsonProperty("C1")]
	public string Name { get; set; }
	
	[System.Runtime.Serialization.DataMember(Name = "C2")]
	[Newtonsoft.Json.JsonProperty("C2")]
	public string Description { get; set; }
	
	[Newtonsoft.Json.JsonProperty("C3")]
	public string ImageUrl { get; set; }
	
	[Newtonsoft.Json.JsonProperty("C4")]
	public string LogoUrl { get; set; }
	
	[Newtonsoft.Json.JsonProperty("C5")]
	public string ProductUrl { get; set; }
	
	[Newtonsoft.Json.JsonProperty("C6")]
	public Decimal Price { get; set; }
	
	[Newtonsoft.Json.JsonProperty("C7")]
	public Decimal StorePrice { get; set; }
	
	[Newtonsoft.Json.JsonProperty("C8")]
	public Decimal DiscountValue { get; set; }
	
	[Newtonsoft.Json.JsonProperty("C9")]
	public string DicountPercentage { get; set; }
	
	[Newtonsoft.Json.JsonProperty("C10")]
	public string ExternalProductId { get; set; }
	
	[Newtonsoft.Json.JsonProperty("C11")]	
	public string Category { get; set; }
	
	[Newtonsoft.Json.JsonProperty("C12")]
	public string NotUsed { get; set; }
}
public class SPProductJson
{
	[System.Runtime.Serialization.DataMember(Name = "r")]
	[Newtonsoft.Json.JsonProperty("r")]
	public SPProduct Products { get; set; }
}

To run on LinqPad choose C# Program and then press F4 to add 2 nuget packages and the Serialization dll:

the output:

I just added some DataMember 's to see if it would do the trick, but I’m having no luck.

Can anyone help me finally get how can I use Newtonsoft.Json instead of ServiceStack.Text ?

I completely forgot to add [System.Runtime.Serialization.DataContract] … works as normal now :smile:

this was not that hard now!

1 Like