YAML 第三章 C#解析YAML

24 篇文章 1 订阅
4 篇文章 0 订阅

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为使用量最大,同时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 Alley\nSuite 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的信息,并输出

章节

参考资料

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值