using System.IO;
using System.Threading.Tasks;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
namespace ColdMint.scripts.serialization;
public static class YamlSerialization
{
///
/// YamlDeserializer
/// Yaml反序列化器
///
private static readonly IDeserializer YamlDeserializer = new DeserializerBuilder()
.WithNamingConvention(UnderscoredNamingConvention.Instance) // convent snake_case
.Build();
private static readonly ISerializer YamlSerializer = new SerializerBuilder()
.WithNamingConvention(UnderscoredNamingConvention.Instance) // convent snake_case
.Build();
///
/// Read a Json file to type T
/// 读取一个Json文件到T类型
///
///
///
///
public static async Task ReadYamlFileToObj(string path)
{
await using var openStream = File.OpenRead(path);
var yaml = await new StreamReader(openStream).ReadToEndAsync();
return YamlDeserializer.Deserialize(yaml);
}
///
/// Serialize the object to Json
/// 将对象序列化为Yaml
///
///
///
public static string Serialize(object obj)
{
return YamlSerializer.Serialize(obj);
}
///
/// Deserialize Yaml to the object
/// 反序列化Yaml到对象
///
///
///
///
// ReSharper disable ReturnTypeCanBeNotNullable
public static T? Deserialize(string yaml)
{
return YamlDeserializer.Deserialize(yaml);
}
// ReSharper restore ReturnTypeCanBeNotNullable
}