/** <inheritDoc /> */ public T ToPortable <T>(object obj) { if (obj is IPortableObject) { return((T)obj); } IPortableStream stream = new PortableHeapStream(1024); // Serialize. PortableWriterImpl writer = _marsh.StartMarshal(stream); try { writer.Write(obj); } finally { // Save metadata. _marsh.FinishMarshal(writer); } // Deserialize. stream.Seek(0, SeekOrigin.Begin); return(_marsh.Unmarshal <T>(stream, PortableMode.ForcePortable)); }
/// <summary> /// Internal deserialization routine. /// </summary> /// <param name="mode">The mode.</param> /// <returns> /// Deserialized object. /// </returns> private T Deserialize <T>(PortableMode mode) { if (_deserialized == null) { IPortableStream stream = new PortableHeapStream(_data); stream.Seek(_offset, SeekOrigin.Begin); T res = _marsh.Unmarshal <T>(stream, mode); IPortableTypeDescriptor desc = _marsh.Descriptor(true, _typeId); if (!desc.KeepDeserialized) { return(res); } _deserialized = res; } return((T)_deserialized); }