public void Serialize(object obj, Stream stream) { BaseTypeConverter converter = ConvertersSelector.SelectConverter(obj); var serializationStream = new SerializationStream(stream); converter.Serialize(obj, serializationStream); }
public T Deserialize <T>(byte[] stream) { var workingStream = new WorkingStream(stream); SerializedType deserializedType = workingStream.ReadSerializedType(); if (deserializedType == SerializedType.Null) { return(default(T)); } Type sourceType = deserializedType.GetBaseType(); if (sourceType == null) { byte[] typeInfo = workingStream.ReadBytesWithSizePrefix(); sourceType = TypeUtils.FromUTF8Bytes(typeInfo); } BaseTypeConverter converter = ConvertersSelector.SelectConverter(sourceType); if (converter is IEnumerableConverter) { var preparedData = converter.DeserializeToObject(stream) as IEnumerable; if (preparedData is IList) { var listType = typeof(List <>); var genericArgs = sourceType.GenericTypeArguments; var concreteType = listType.MakeGenericType(genericArgs); var data = Activator.CreateInstance(concreteType); foreach (var item in preparedData) { ((IList)data).Add(item); } return((T)data); } else { return((T)preparedData); } } return((T)converter.DeserializeToObject(stream)); }
public void Serialize(object obj, Stream stream) { BaseTypeConverter converter = ConvertersSelector.SelectConverter(obj); converter.Serialize(obj, stream); }