6

Архитектура в моем приложении несколько нравится этасериализации Внутренности в .Net

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

Я использую Entity Framework 4.0 и .NET Framework 4.0.

Мой уровень доступа к данным возвращает объект POCo, который становится сериализованным и десериализованным при передаче объекта в и из.

Теперь, когда WCF возвращает объект до его сериализации, он прекрасен, как я и ожидал, но когда он получает десериализацию, он иногда пропускает некоторые свойства (навигационные свойства) моих пользовательских объектов не все время, а иногда. Особенно, когда я отправляю список настраиваемых объектов по проводу. Он возвращает значения для одного объекта все время.

Для записи я использую Serializer DataContract.

Я хочу получить представление об этом процессе сериализации/десериализации. И я также хочу просмотреть сериализованный объект и точные точки, где объект становится сериализованным и десериализованным.

ответ

1

Я не верю, что есть простой способ отладки сериализации, но на самом деле нет магии: Сериализация - это простой процесс, и вы можете сделать это самостоятельно.

Для записи я использую Serializer DataContract.

Вот код для сериализации/десериализации

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); 
     } 
    } 

иногда пропускает некоторые свойства

В принципе, если что-то не так в процессе сериализации сериализатор кинет SerializationException (с подробностями). В вашем случае (свойство по-прежнему пусто или равно умолчанию), похоже, что вы забыли некоторые атрибуты.

Ну, это не просто помочь вам немного больше без какой-либо части кода, но просто знайте о функциях datacontractserializer (см. here).

Особенно, когда я отправляю список настраиваемых объектов по проводам. Он постоянно возвращает значения для одного объекта.

Попробуйте воспроизвести его и напишите для этого единичный тест. Случайных ошибок нет, но очень специфические сценарии, которые приводят к ошибкам.

0

Вы можете использовать точку расширения IMessageInspector, чтобы увидеть, как выглядит форма сообщения, которая будет включать в себя графический объект. See here for implementing IMessageInspector.

Другой вариант - реализовать OnDeserializing attribute, чтобы получить доступ к процессу сериализации.

Кроме того, вы можете включить WCF tracing и получить данные сообщения, когда они пересекают границы.