Dynamiska objekt med förbjudna namn

2012-11-23

Några fallgropar med att parsa JSON till dynamiska objekt i .NET

Jag har arbetat lite med dynamiska objekt parsade från JSON i .NET. Dels använder jag det i mitt test av EBSCO Discovery Service nya API och dels använder jag det i arbetet med att visa upp mitt Google+-flöde här på sajten.

Det verkar smidigt. Särskilt när man jobbar med MVC så är det en enkel väg att trycka ut ett dynamiskt objekt i vyn och där bara presentera det rätt upp och ner istället för att parsa JSON-svaret till en klass och sedan lyfta ut den. Det finns naturligvis nackdelar. Bland mycket annat är en nackdel att en designer inte har lika lätt att skriva om vyn när han inte har Intellisense på objekten.

För att parsa JSON-svaren använder jag System.Web.Helpers. Där finns klassen JSON med funktionen Decode(string).

Så här kan ett enkelt exempel se ut:

För att inte få kompileringsfelet One or more types required to compile a dynamic expression cannot be found måste man lägga till en referens till Microsoft.CSharp i sitt projekt. Se den här frågan på StackOverflow.

En problem jag stötte på var att Google+ i sitt JSON-svar returnerar objekt och egenskaper med namn som är reserverade i C#. Det blir tydligt i Visual Studio. Den första bilden visar det dynamiska objektet expanderat så att man ser egenskapen object.
Googleplusobject

Den andra bilden visar vad som händer när man expanderar objektet. Visual Studio får ett fel. Kanska är det t.o.m en bug.

Googleplusobjectexpanded

Som tur är går det att komma runt det. För att referera till egenskaper med reserverade namm lägger man bara till ett @ framför namnet.

Lätt som en plätt.

/Bibliotekarien - The Librarian