2011-10-25 12 views
7

Mamy aplikację z obiektami, które chcielibyśmy przetestować w bazie danych.
Obecnie używamy NetDataContractSerializer, ale ostatnio dowiedzieliśmy się, że ze względu na zawarte w nim typy informacji .Net tworzy ogromne pliki, co oznacza wolną aplikację, nawet dla podstawowych obiektów.
Zamiast tego rozważamy przejście na DataContractSerializer, a ja szukałem dobrego porównania obu, ale nie znalazłem.NetDataContractSerializer kontra DataContractSerializer

  • Jaka jest różnica w rozmiarach między obiektami utworzonymi przez dwa?
  • Czy jest duża różnica w wydajności?
  • Czy którykolwiek z nich jest problematyczny, gdy mam obiekt zawierający List<X>, gdzie X jest dziedziczony przez wiele innych obiektów, tak że lista zawiera wiele różnych typów w czasie wykonywania? (Powiedziano mi, że DataContractSerializer można podać KnownTypes atrybuty, ale to oznacza więcej zależności w kodzie. Czy jest jakiś sposób, aby DataContractSerializer znać wszystkie że typy w moim rozwiązanie?)

Dzięki.

Odpowiedz

9
  1. NetDataContractSerializer (NetDCS) zapisuje informacje typu dla wszystkich obiektów, natomiast DataContractSerializer (DCS) zapisuje tylko te, które trzeba (to znaczy, jeśli zadeklarować elementu jako typ B i rzeczywistą wartość członka kiedy jest serializowany jest typu D, gdzie D jest typem pochodnym od B, więc jest dużo mniej "szumu" w serializowanym typie DCS
  2. Niezupełnie, ale powinieneś wypróbować oba ze swoim scenariuszem, aby sprawdzić, czy to wpłynie na ciebie
  3. Musisz użyć znanych typów w DCS, ale możesz użyć DataContractResolver, jeśli nie chcesz pracować ze znanymi typami.Na przykład takiego przelicznika można znaleźć w Youssef Massaoui's blog, i trochę więcej informacji na temat samego resolvera można znaleźć w moim poście na temat rozszerzalności WCF pod adresem http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/21/wcf-extensibility-data-contract-resolver.aspx.