Сериализация объекта, который содержит объект linq2sql для StateServer - PullRequest
3 голосов
/ 06 октября 2011

В настоящее время я пытаюсь сериализовать объект для веб-проекта, размещенного на сервере, который использует SessionState = Stateserver.

Я пометил объект как [Serializable], но этот объект содержит объект, являющийся частью LINQ2SQL DataContext. Я уже читал, что это можно сериализовать с DataContractSerializer, но где это правильное место?

Нужно ли просто реализовать ISerializeable и сериализовать мой NodeObject внутри функции GetObjectData() и добавить его в SerializationInfo? У кого-нибудь есть идеи по поводу хорошего подхода?

Ответы [ 2 ]

0 голосов
/ 07 октября 2011

Сделано сейчас.Я пометил свои Объекты, которые содержат Linqobject [Serializable] и включил интерфейс ISerializable.DBOItem - это мой LinqObject

    public void GetObjectData( SerializationInfo info, StreamingContext context )
    {
        PropertyInfo[] infos = this.DBOItem.GetType().GetProperties();
        foreach ( PropertyInfo pi in infos )
        {
            bool isAssociation = false;
            foreach ( object obj in pi.GetCustomAttributes( true ) )
            {
                if ( obj.GetType() == typeof( System.Data.Linq.Mapping.AssociationAttribute ) )
                { isAssociation = true; break; }
            }
            if ( !isAssociation )
            {
                if ( pi.GetValue( this.DBOItem, null ) != null )
                {
                    info.AddValue( pi.Name, pi.GetValue( this.DBOItem, null ) );
                }
            }
        }
    } 

Ctor, который необходимо включить для десериализации, выглядит следующим образом:

protected BusinessObjectBase( SerializationInfo info, StreamingContext context )
{
    this.DBOItem = new T();
            PropertyInfo[] properties = this.DBOItem.GetType().GetProperties();
            SerializationInfoEnumerator enumerator = info.GetEnumerator();

            while ( enumerator.MoveNext() )
            {
                SerializationEntry se = enumerator.Current;
                foreach ( PropertyInfo pi in properties )
                {
                    if ( pi.Name == se.Name )
                    {
                        pi.SetValue( this.DBOItem, info.GetValue( se.Name, pi.PropertyType ), null );
                    }
                }
            }
}
0 голосов
/ 06 октября 2011

Пожалуйста, найдите ссылку ниже.Будет полезно понять разницу между [Serializable] VS DataContractSerializer.Пожалуйста, выполняйте в зависимости от вашей пригодности, так как в вашем проекте нет большой разницы.

http://www.danrigsby.com/blog/index.php/2008/03/07/xmlserializer-vs-datacontractserializer-serialization-in-wcf/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...