概述
YAML 第三章 C#解析YAML
简介
YAML作为一个开放式的格式,已经被很多语言所解析,由于本系列文章中有部分与Unity有关,所以此文中将重点介绍如何使用C#中的YamlDotNet库进行解析Yaml。
声明
本文中的内容属于个人总结整理而来,个人水平有限,对于部分细节难免有理解错误及遗漏之处,如果您在阅读过程中有所发现,希望您能指正,同时文章中的部分内容也参考了其它大神的文章,如果文章中的内容侵犯了您的权益,表示非常歉意,请您指出,我将尽快修改。
如果您进行转载,请标明出处。
YAML学习笔记三 C#解析YAML(http://www.liyubin.com/articles/2019/03/14/1552530988343.html)
c#解析YAML库
C#/.NET解析YAML的库主要有以下:
- YamlDotNet
- yaml-net
- yatools.net
上述的库中尤其以YamlDotNet为使用量最大,同时YamlDotNet在Unity的商店中也提供了对应的下载,所以本文将以YamlDotNet做为C#解析的主要的库
GitHub
Asset Store
YamlDotNet使用方法
示例相关的代码:
public class Address
{
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
}
private string yamlStr =
@"---
street: '123 Tornado AlleynSuite 16'
city: 'East Westville'
state: 'KS'
...";
-
Deserializing an object graph
var input = new StringReader(yamlStr); var deserializer = new DeserializerBuilder() .WithNamingConvention(new CamelCaseNamingConvention()) .Build(); var order = deserializer.Deserialize<Address>(input);
-
Serializing an object graph
var address = new Address() { Street = "Test street", City = "Test City", State = "Test State" }; var serializer = new SerializerBuilder().Build(); var yaml = serializer.Serialize(address);
-
Loading a YAML Stream
var input = new StringReader(yamlStr); var yaml = new YamlStream(); yaml.Load(input); var mapping = (YamlMappingNode)yaml.Documents[0].RootNode; foreach (var entry in mapping.Children) { Debug.Log(((YamlScalarNode)entry.Key).Value); }
-
YAML与JSON
YAML转换到JSON:
var input = new StringReader(yamlStr); var deserializer = new DeserializerBuilder().Build(); var yamlObject = deserializer.Deserialize(input); var serializer = new SerializerBuilder() .JsonCompatible() .Build(); var json = serializer.Serialize(yamlObject);
-
YamlMemberAttribute
[YamlMember(Alias = “ship-to”, ApplyNamingConventions = false)]
为属性重新命名
使用YamlDotNet读取Unity中资源
-
读取meta文件
string content = File.ReadAllText(metaFilePath); var input = new StringReader(content); var deserializer = new DeserializerBuilder().Build(); var yamlObject = deserializer.Deserialize(input);
将会将Meta文件中的内容解析为Dictionary类型
-
读取prefab文件
var input = new StreamReader(prefabPath, Encoding.UTF8); var yaml = new YamlStream(); yaml.Load(input); for (int i = 0; i < yaml.Documents.Count; i++) { string str = ""; str = str + (YamlMappingNode)yaml.Documents[i].RootNode + "n"; Debug.Log(str); foreach (YamlDotNet.RepresentationModel.YamlNode yamlNode in yaml.Documents[i].AllNodes) { Debug.Log(yamlNode.ToString()); } }
将会解析unity序列化的prefab的信息,并输出
章节
- YAML学习笔记 总章
- 第一章 YAML基本概念及语法
- 第二章 YAML与Unity
- 第三章 C#解析YAML
参考资料
- YamlDotNet
- YamlDotNet for Unity
- Unity场景和代码合并以及UnityYAMLMerge的使用
最后
以上就是懦弱毛巾为你收集整理的YAML 第三章 C#解析YAMLYAML 第三章 C#解析YAML简介声明c#解析YAML库YamlDotNet使用方法使用YamlDotNet读取Unity中资源章节参考资料的全部内容,希望文章能够帮你解决YAML 第三章 C#解析YAMLYAML 第三章 C#解析YAML简介声明c#解析YAML库YamlDotNet使用方法使用YamlDotNet读取Unity中资源章节参考资料所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复