6

L'architettura nella mia domanda è un po 'come questointerni di serializzazione in .Net

MainUI------->WCF------->BLL------->DAL 

sto utilizzando Entity Framework 4.0 e .NET Framework 4.0.

Il mio livello di accesso ai dati restituisce l'oggetto PoCo che viene serializzato e deserializzato durante il trasferimento dell'oggetto da e verso.

Ora quando WCF restituisce l'oggetto prima che venga serializzato, va bene, proprio come mi aspettavo, ma quando viene deserializzato a volte manca alcune proprietà (Proprietà di navigazione) dei miei oggetti personalizzati, non sempre ma a volte. Soprattutto quando invio una lista di oggetti personalizzati sul filo. Restituisce i valori per il singolo oggetto per tutto il tempo.

Per la cronologia, sto utilizzando DataContract Serializer.

Voglio alcune informazioni su questo processo di serializzazione/deserializzazione. E voglio anche vedere l'oggetto serializzato e i punti esatti in cui un oggetto viene serializzato e deserializzato.

risposta

1

Non credo ci sia un modo semplice per eseguire il debug della serializzazione, ma in realtà non c'è magia: la serializzazione è un processo semplice e semplice e puoi farlo da solo.

Per la cronologia, sto utilizzando DataContract Serializer.

Ecco il codice per serializzare/Deserialize

public static string Serialize(object obj) { 
     using(MemoryStream memoryStream = new MemoryStream()) 
     using(StreamReader reader = new StreamReader(memoryStream)) { 
      DataContractSerializer serializer = new DataContractSerializer(obj.GetType()); 
      serializer.WriteObject(memoryStream, obj); 
      memoryStream.Position = 0; 
      return reader.ReadToEnd(); 
     } 
    } 

    public static object Deserialize(string xml, Type toType) { 
     using(Stream stream = new MemoryStream()) { 
      byte[] data = System.Text.Encoding.UTF8.GetBytes(xml); 
      stream.Write(data, 0, data.Length); 
      stream.Position = 0; 
      DataContractSerializer deserializer = new DataContractSerializer(toType); 
      return deserializer.ReadObject(stream); 
     } 
    } 

a volte manca alcune proprietà

In sostanza, se c'è qualcosa di sbagliato durante il processo di serializzazione, il serializzatore getterà un SerializationException (con dettagli). Nel tuo caso (la proprietà è ancora vuota o uguale al valore predefinito), sembra che tu abbia dimenticato alcuni attributi.

Bene, non è facile aiutarvi un po 'di più senza alcun codice, ma solo essere a conoscenza delle funzionalità di datacontractserializer (vedere here).

Soprattutto quando invio Elenco di oggetti personalizzati sul filo. È restituisce i valori per l'oggetto singolo tutto il tempo.

Provare a riprodurlo e scrivere un test di unità per quello. Non ci sono errori casuali, ma solo scenari molto specifici che portano a errori.

0

È possibile utilizzare il punto di estensione IMessageInspector per visualizzare l'aspetto del messaggio che includerà il grafico dell'oggetto. See here for implementing IMessageInspector.

Un'altra opzione è implementare OnDeserializing attribute per accedere al processo di serializzazione.

Inoltre, è possibile attivare WCF tracing e acquisire i dettagli del messaggio mentre superano i limiti.