public void Serialize(Resource res, Stream outputStream) { var buffer = new BinaryDataWriter(outputStream); buffer.Write(Signature.ToCharArray()); buffer.Write((ushort)res.Version); foreach (var layer in res.GetLayers()) { var serializer = handlerProvider.Get(layer); if (serializer == null) { throw new ResourceException("Unsupported layer type " + layer.GetType().FullName); } buffer.WriteCString(serializer.LayerName); // write each layer to the temporary buffer // to be able to prefix layer length using (var ms = new MemoryStream()) using (var layerBuffer = new BinaryDataWriter(ms)) { serializer.Serialize(layerBuffer, layer); buffer.Write((int)ms.Length); buffer.Write(ms.ToArray()); } } }
public ILayerHandler Get(object data) { var handler = handlers.Find(x => x.DataType == data.GetType()); if (handler != null) { return(handler); } var binaryHandler = binaryHandlerProvider.Get(data); if (binaryHandler != null) { return(new BinLayerHandler(binaryHandler)); } return(null); }