/// <summary> /// Reads an object from the given stream. /// </summary> static public bool Read <T>(ref T ioObject, Stream inStream, Format inFormat = Format.AutoDetect, ISerializerContext inContext = null) where T : ISerializedObject { if (inStream == null) { Debug.LogError("[BeauData] Error when reading object: Provided stream is null."); return(false); } if (inStream.Length == 0) { Debug.LogWarning("[BeauData] Error when reading object: Empty stream"); return(false); } MemoryStream memoryStream = inStream is MemoryStream ? (MemoryStream)inStream : GetBytes(inStream); if (inFormat == Format.AutoDetect) { inFormat = DetectFileFormatFromContents(memoryStream); } memoryStream.Position = 0; try { Serializer serializer; switch (inFormat) { case Format.JSON: { JSON root = JSON.Parse(System.Text.Encoding.UTF8.GetString(memoryStream.GetBuffer())); serializer = new JSONSerializer(root); break; } case Format.XML: { XmlDocument document = new XmlDocument(); document.LoadXml(System.Text.Encoding.UTF8.GetString(memoryStream.GetBuffer())); serializer = new XMLSerializer(document); break; } case Format.Binary: { serializer = new BinarySerializer(memoryStream); break; } case Format.GZIP: { serializer = new GZIPSerializer(memoryStream); break; } default: { Debug.LogError("[BeauData] Unknown file format"); return(false); } } using (serializer) { serializer.Read <T>(ref ioObject, inContext); if (serializer.HasErrors) { Debug.LogError("[BeauData] Error when reading object:\n" + serializer.Errors); } return(!serializer.HasErrors); } } catch (Exception e) { Debug.LogException(e); Debug.LogError("[BeauData] Exception when reading object"); return(false); } }
/// <summary> /// Reads an object from the given text. /// </summary> static public bool Read <T>(ref T ioObject, string inText, Format inFormat = Format.AutoDetect, ISerializerContext inContext = null) where T : ISerializedObject { if (string.IsNullOrEmpty(inText)) { Debug.LogWarning("[BeauData] Error when reading object: Empty string"); return(false); } if (inFormat == Format.AutoDetect) { inFormat = DetectFileFormatFromContents(inText); } try { Serializer serializer; switch (inFormat) { case Format.JSON: { JSON root = JSON.Parse(inText); serializer = new JSONSerializer(root); break; } case Format.XML: { XmlDocument document = new XmlDocument(); document.LoadXml(inText); serializer = new XMLSerializer(document); break; } case Format.Binary: { byte[] buffer = System.Text.Encoding.UTF8.GetBytes(inText); MemoryStream stream = GetStream(buffer); serializer = new BinarySerializer(stream); break; } case Format.GZIP: { byte[] buffer = System.Text.Encoding.UTF8.GetBytes(inText); MemoryStream stream = GetStream(buffer); serializer = new GZIPSerializer(stream); break; } default: { Debug.LogError("[BeauData] Unknown file format"); return(false); } } using (serializer) { serializer.Read <T>(ref ioObject, inContext); if (serializer.HasErrors) { Debug.LogError("[BeauData] Error when reading object:\n" + serializer.Errors); } return(!serializer.HasErrors); } } catch (Exception e) { Debug.LogException(e); Debug.LogError("[BeauData] Exception when reading object"); return(false); } }