写在前面
Yaml 格式的配置文件简洁小巧,大概比json格式还要小三分之一,很多主流软件包括IDE都使用Yaml格式来做配置文件,日常开发的时候也可以利用其优点来存储序列化后的对象,下面介绍如何用C#来读写Yaml文件。
操作步骤
先通过NuGet 安装YamlDotNet, 这是一款比较流行的用来操作Yaml的.Net 类库。
操作代码示例:
var serializer = new SerializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build();
var deserializer = new DeserializerBuilder().WithNamingConvention(UnderscoredNamingConvention.Instance).Build();
var ymlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"asset_table.yml");
if (File.Exists(ymlFile))
{
var ymlContent = File.ReadAllText(ymlFile);
var buildConfig = deserializer.Deserialize<BuildConfigFile>(ymlContent);
if (buildConfig != null)
{
foreach (var item in buildConfig.assetBundles)
{
// 获取配置内容并修改
// item.name
}
// 序列化成新的yaml文本并保存
var newYamlContent = serializer.Serialize(buildConfig);
File.WriteAllText(ymlFile,newYamlContent);
}
}
数据结构示例:
public class BuildConfigFile
{
public class AssetBundleItem
{
[YamlMember(Alias = "name")]
public string name { get; set; }
[YamlMember(Alias = "size")]
public long size { get; set; }
[YamlMember(Alias = "variant")]
public string variant { get; set; }
[YamlMember(Alias = "version")]
public long version { get; set; }
[YamlMember(Alias = "md5")]
public string md5 { get; set; }
[YamlMember(Alias = "md5bytes")]
public string md5bytes { get; set; }
[YamlMember(Alias = "dependencies")]
public string[] dependencies { get; set; }
[YamlMember(Alias = "local")]
public bool local { get; set; }
[YamlMember(Alias = "assets")]
public string[] assets { get; set; }
}
[YamlMember(Alias = "asset_bundles")]
public List<AssetBundleItem> assetBundles { get; set; }
}
Yaml操作工具类:
public static class YamlHelper
{
private static ISerializer _serializer;
private static IDeserializer _deserializer;
static YamlHelper()
{
_serializer = new SerializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build();
_deserializer = new DeserializerBuilder().WithNamingConvention(UnderscoredNamingConvention.Instance).Build();
}
public static string Serialize(object target)
{
return _serializer.Serialize(target);
}
public static void SerializeToFile(object target,string filePath)
{
var content = Serialize(target);
File.WriteAllText(filePath,content,Encoding.UTF8);
}
public static T Deserialize<T>(string yaml)
{
return _deserializer.Deserialize<T>(yaml);
}
public static T DeserializeFromFile<T>(string filePath)
{
var yaml = File.ReadAllText(filePath,Encoding.UTF8);
return Deserialize<T>(yaml);
}
}
序列化的yaml文本示例:
总结
在对空间敏感的使用场景,如需要放到cdn上,进行频繁的网络传输比对时,是非常有价值的。
原文地址:https://blog.csdn.net/rjcql/article/details/134341930
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。