Ostatnim razem rozpisałem się na temat serializacji WSZYSTKIEGO, nawet interfejsów, do JSONa i możliwością ich deserializacji do odpowiednich klas. Bardzo szybko pojawił się jednak problem: przedstawiony przeze mnie sposób wypluwa z siebie informacje nie tylko o źródłowym typie, ale także o dllce z której ów typ pochodzi. W wielu przypadkach może być to działanie pożądane, jednak u mnie kluczowym aspektem całej sprawy była "przenaszalność" zserializowanych akcji pomiędzy wersjami oprogramowania.
Rozwiązanie okazało się dość proste: wystarczy napisać własny JavaScriptTypeResolver! Po podejrzeniu implementacji standardowego SimpleTypeResolver zauważyć da się, że taka implementacja nie powinna nikomu nastręczyć żadnych trudności:
Dziedziczę z klasy bazowej, zwracam Type.FullName zamiast AssemblyQualifiedName i… tyle!
1: public class ExecutableActionsTypeResolver: JavaScriptTypeResolver 2: { 3: public override Type ResolveType(string id) 4: { 5: return Type.GetType(id, true); 6: } 7: 8: public override string ResolveTypeId(Type type) 9: { 10: return type.FullName; 11: } 12: } 13: 14: public class ExecutableActionsSerializer : JavaScriptSerializer 15: { 16: public ExecutableActionsSerializer() 17: : base(new ExecutableActionsTypeResolver()) 18: { 19: } 20: }
"przenaszalność"?
Chyba lepszym słowem i jednocześnie bardziej poprawnym byłaby "przenośność"?
@k
Bardziej poprawną formą jest "przenaszalność" – mi też to brzmi dziwnie, ale co zrobić :)
Do serializacji/deserializacji JSON i nie tylko polecam https://github.com/ServiceStack/ServiceStack.Text
Daniel,
Dzięki za linka, wygląda bardzo fajne! Trzeba będzie o tym pamiętać na przyszłość:)
Spoko;) Ja sam jestem pod wrażeniem projektu ServiceStack jako alternatywy dla WCF Webservices. Działa ****iście:>
Już od dawna korzystam z ServiceStack.Text, który deserializuje/serializuje z/do klas bez żadnych kombinacji, no i robi to o wiele wydajniej niż mechanizmy zawarte w .net.
Świetne są rozwiązania, które wymagają więcej zastanowienia niż napisanych linii kodu :) Przydatna rzecz.
ps: dajcie spokój z tym poprawianiem zwrotów.. Szerzy się "plaga" językowych purystów z bloga na blog…