fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
2 minut

Serializacja do JSON – c.d.


24.06.2011

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:

simpletyperesolver

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:  }

Nie przegap kolejnych postów!

Dołącz do ponad 9000 programistów w devstyle newsletter!

Tym samym wyrażasz zgodę na otrzymanie informacji marketingowych z devstyle.pl (doh...). Powered by ConvertKit
Notify of
k
k

"przenaszalność"?
Chyba lepszym słowem i jednocześnie bardziej poprawnym byłaby "przenośność"?

mgibas
mgibas

@k

Bardziej poprawną formą jest "przenaszalność" – mi też to brzmi dziwnie, ale co zrobić :)

Daniel Luberda
Daniel Luberda

Do serializacji/deserializacji JSON i nie tylko polecam https://github.com/ServiceStack/ServiceStack.Text

procent

Daniel,
Dzięki za linka, wygląda bardzo fajne! Trzeba będzie o tym pamiętać na przyszłość:)

Daniel Luberda
Daniel Luberda

Spoko;) Ja sam jestem pod wrażeniem projektu ServiceStack jako alternatywy dla WCF Webservices. Działa ****iście:>

andrew
andrew

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.

andrzej

Ś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…

Szkolenie z testów

Szkolenie z baz danych

Facebook

Książka

Zobacz również