>>>Hi All,
>>>
>>>I am trying to build a list of objects but if the underlying referenced object changes or goes away I have problems. To avoid this I am trying some code I found on c-shaprcorner to copy an object. I have tried two different versions, but both blow up on the third line and I am unable at the moment to find why. The objects passed in appear to be valid and the entity object has the [serializable] attribute on it.
>>>
>>>Option One
>>>
>>>public static LocationEntity MakeEntityCopy(LocationEntity entityToIsolate)
>>>{
>>> MemoryStream stream = new MemoryStream();
>>> IFormatter formatter = new BinaryFormatter();
>>> formatter.Serialize(stream, entityToIsolate);
>>> stream.Seek(0, 0);
>>> LocationEntity IsolatedEntity = (LocationEntity)formatter.Deserialize(stream);
>>> stream.Close();
>>> return IsolatedEntity;
>>>}
>>>
>>>
>>>Option Two
>>>
>>>public static LocationEntity MakeEntityCopy(LocationEntity entityToIsolate)
>>>{
>>> MemoryStream stream = new MemoryStream();
>>> BinaryFormatter bf = new BinaryFormatter();
>>> bf.Serialize(stream, entityToIsolate);
>>> stream.Position = 0;
>>> LocationEntity IsolatedEntity = (LocationEntity)bf.Deserialize(stream);
>>> stream.Close();
>>> return IsolatedEntity;
>>>}
>>>
>>>
>>>Is there anything obvious I am missing?
>>
>>What is LocationEntity ? Simply marking it as serializable doesn't neccessarily make it so .....
>>And what's the exact exception ?
>
>
>OK, stupid me. I wrapped the call in a try catch and this is the error
>Type 'BTSystems.PantryWare.Business.ABusinessEntity' in Assembly 'BTSystems.PantryWare.Business, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
>
>What is needed for the class to be Serializable other than the attribute?
The serializer will try to serialize the complete object tree. That means that all properties of the class must be serializable. Which, for example, means that if a property holds a reference to another object the serializer will attempt to serialize that as well. Look carefully at the members of the class you are trying to serialize. If there are any properties that are not essential then mark them as non-serializable. If there are items that are essential but are not natively serializable then you can implement your own SerializationSurrogate to handle them.