Created
November 11, 2020 02:14
-
-
Save wallstop/36a535844b1c40b4a3b15ed60920b9c6 to your computer and use it in GitHub Desktop.
Serializer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Assets.Scripts.Core.Extension; | |
using Assets.Scripts.Core.Serialization.JsonConverters; | |
using Newtonsoft.Json; | |
using Newtonsoft.Json.Converters; | |
using System.IO; | |
using System.Runtime.Serialization.Formatters.Binary; | |
using System.Text; | |
namespace Assets.Scripts.Core.Serialization | |
{ | |
internal static class SerializerEncoding | |
{ | |
public static readonly Encoding Encoding = Encoding.Default; | |
public static readonly JsonConverter[] Converters = | |
{new StringEnumConverter(), Vector3Converter.Instance, Vector2Converter.Instance}; | |
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings | |
{ | |
ReferenceLoopHandling = ReferenceLoopHandling.Ignore, | |
Converters = Converters | |
}; | |
} | |
public static class Serializer | |
{ | |
public static T BinaryDeserialize<T>(byte[] data) | |
{ | |
using (MemoryStream memoryStream = new MemoryStream(data)) | |
{ | |
BinaryFormatter binaryFormatter = new BinaryFormatter(); | |
memoryStream.Position = 0; | |
return (T)binaryFormatter.Deserialize(memoryStream); | |
} | |
} | |
public static byte[] BinarySerialize<T>(T input) | |
{ | |
using (MemoryStream memoryStream = new MemoryStream()) | |
{ | |
BinaryFormatter binaryFormatter = new BinaryFormatter(); | |
binaryFormatter.Serialize(memoryStream, input); | |
return memoryStream.ToArray(); | |
} | |
} | |
public static T JsonDeserialize<T>(string data) | |
{ | |
return JsonConvert.DeserializeObject<T>(data, SerializerEncoding.Settings); | |
} | |
public static byte[] JsonSerialize(object input) | |
{ | |
return JsonStringify(input).GetBytes(); | |
} | |
public static string JsonStringify(object input, bool pretty = false) | |
{ | |
return JsonConvert.SerializeObject(input, pretty ? Formatting.Indented : Formatting.None, | |
SerializerEncoding.Settings); | |
} | |
public static T ReadFromJsonFile<T>(string path) | |
{ | |
string settingsAsText = File.ReadAllText(path, SerializerEncoding.Encoding); | |
return JsonDeserialize<T>(settingsAsText); | |
} | |
public static void WriteToJsonFile<T>(T input, string path) | |
{ | |
string jsonAsText = JsonStringify(input); | |
File.WriteAllText(path, jsonAsText); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment