Przejdź do treści

DevStyle - Strona Główna
Serializacja do JSON – c.d.

Serializacja do JSON – c.d.

Maciej Aniserowicz

24 czerwca 2011

Backend

Tagi:

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

    Zobacz również