2009-04-08 11 views

risposta

4

sto pensando principalmente di XmlSerializer qui:

  • si è limitata ai dati ad albero; esso non può gestire grafi di oggetti pieni
  • è limitato ai soci pubblici, sulle classi pubbliche
  • non può davvero fare molto con i membri object
  • ha alcuni punti deboli in tutto generici
  • come molti serializzatori, non toccherà le proprietà di istanza in una raccolta (pratica male in primo luogo)
  • xml semplicemente non è sempre una buona scelta per dati di grandi dimensioni (non meno importante, per le prestazioni)
  • richiede un costruttore senza parametri pubblica

DataContractSerializer risolve alcuni di questi, ma ha i suoi limiti:

    valori
  • non può gestire in attributi
  • richiede .NET 3.0 (e quindi non tanto l'uso in 2,0)
+0

La questione membri pubblici può essere lavorato intorno utilizzando DataContractSerializer –

+0

vero - chiarirà ... –

+0

Questi sono tutti buone cose da sapere sul framework di serializzazione Xml in .NET, ma non direi che sono scenari comuni in cui la serializzazione XML "fallisce". Ad esempio, che il serializzatore Xml serializza solo membri pubblici di lettura/scrittura è un attributo del framework di serializzazione, non uno scenario in cui non riesce. Il fatto che richieda alla classe di avere un amministratore pubblico senza parametri non è un "fallimento" di per sé. – Cheeso

0

TimeSpan oggetti non serializzabili. IDictionary - I tipi di implementazione non sono serializzabili (sebbene siano possibile serializzare con alcuni massaggi manuali).

1

A seconda del serializzatore, i riferimenti ciclici potrebbero non funzionare

0

AFAIK, le classi contrassegnate come [Obsoleto] non sono serializzate da XmlSerializer da .NET 2.0

1

Utilizzando la parola ombre ha anche rotto la serializzazione e deserializzazione per me, perché l'ombra fa sì che una nuova implementazione di tale proprietà di esistere che rende incompatibili per una corretta ricostruzione. Utilizzare gli overload solo se si desidera ridigitare lo specifico per una sottoclasse.

+1

Per coloro che non conoscono VB.NET, "' Shadows' "equivale a' new' in C#: 'public new int PropertyName {get; set;}' dove la classe base ha un 'PropertyName int pubblico virtuale. ..'. –

Problemi correlati