/// <summary> /// Serialize to file. /// </summary> /// <param name="filename"></param> /// <param name="p"></param> /// <returns></returns> public static Result SerializeXml(string filename, object p) { try { // Create folder if not exists. if (Directory.Exists(Path.GetDirectoryName(filename)) == false) { DirectoryInfo info = Directory.CreateDirectory(Path.GetDirectoryName(filename)); if (info == null || info.Exists == false) { return(Result.Fail(string.Format("Failed to create directory [{0}].", Path.GetDirectoryName(filename)))); } } using (XmlWriter xw = XmlWriter.Create(filename)) { return(SerializationHelper.SerializeXml(xw, p)); } } catch (Exception ex) { CoreSystemMonitor.OperationError("Failed to serialize object [" + p.ToString() + "] to xml file [" + filename + "].", ex); return(Result.Failure); } }
/// <summary> /// Perform object serialization to a file. /// </summary> public static Result Serialize(string filename, object value) { try { // Create folder if not exists. if (Directory.Exists(Path.GetDirectoryName(filename)) == false) { DirectoryInfo info = Directory.CreateDirectory(Path.GetDirectoryName(filename)); if (info == null || info.Exists == false) { return(Result.Fail(string.Format("Failed to create directory [{0}].", Path.GetDirectoryName(filename)))); } } byte[] data = SerializationHelper.Serialize(value); File.WriteAllBytes(filename, data); } catch (Exception ex) { string message = string.Format("Failed to serialize to file [{0}]", filename); CoreSystemMonitor.OperationError(message, ex); return(Result.Fail(message)); } return(Result.Success); }
/// <summary> /// Serialize to memory stream. /// </summary> /// <param name="stream"></param> /// <param name="p"></param> /// <returns></returns> public static Result SerializeXml(MemoryStream stream, object p) { try { using (XmlWriter xw = XmlWriter.Create(stream)) { return(SerializationHelper.SerializeXml(xw, p)); } } catch (Exception ex) { CoreSystemMonitor.OperationError("Failed to serialize object [" + p.ToString() + "] to xml stream.", ex); return(Result.Fail(ex)); } }
/// <summary> /// Throws. /// </summary> /// <param name="stream"></param> /// <returns></returns> protected override object DeserializeData(Stream stream) { BinaryFormatter formatter = _formatter; if (formatter == null) { return(null); } try { return(formatter.Deserialize(stream)); } catch (Exception ex) { CoreSystemMonitor.OperationError("Failed to deserialize object", ex); throw new InvalidDataException(ex.Message, ex); } }
/// <summary> /// Helper, overrides. /// </summary> public static TType Deserialize <TType>(string filename) where TType : class { try { byte[] data = File.ReadAllBytes(filename); if (data != null) { object dummy; SerializationHelper.Deserialize(data, out dummy); return((TType)dummy); } } catch (Exception ex) { CoreSystemMonitor.OperationError("Failed to extract proxies manager.", ex); } return(null); }
/// <summary> /// Returns false if failed to serialize. /// </summary> /// <param name="stream"></param> /// <param name="message"></param> /// <returns></returns> public bool Serialize(MemoryStream stream, object message) { if (message == null) { return(false); } long startPosition = stream.Position; // Placeholder. byte[] sizeBytes = BitConverter.GetBytes(int.MaxValue); stream.Write(sizeBytes, 0, sizeBytes.Length); if (SerializeData(stream, message) == false) { stream.Seek(startPosition, SeekOrigin.Begin); return(false); } int length = (int)stream.Position - (int)startPosition; long lastPosition = stream.Position; stream.Seek(startPosition, SeekOrigin.Begin); if (length > MaxMessageSize) { CoreSystemMonitor.OperationError("Message size too big."); return(false); } // Encoding (int.MaxValue - value); this helps diagnostics of message transport errors. sizeBytes = BitConverter.GetBytes(int.MaxValue - length); stream.Write(sizeBytes, 0, sizeBytes.Length); stream.Seek(lastPosition, SeekOrigin.Begin); return(true); }