• 在 .NET 中使用 C# 处理 YAML


    在 .NET 中,可以使用 YamlDotNet 类库解析和生成 YAML 文件。

    YamlDotNet : https://github.com/aaubry/YamlDotNet

    NuGet 下载:https://www.nuget.org/packages/YamlDotNet/

    帮助文档:https://github.com/aaubry/YamlDotNet/wiki

    序列化一个对象为 YAML 格式

    using YamlDotNet.Serialization;
    using YamlDotNet.Serialization.NamingConventions;
    ...
    
     var person = new Person
    {
        Name = "Abe Lincoln",
        Age = 25,
        HeightInInches = 6f + 4f / 12f,
        Addresses = new Dictionary<string, Address>{
            { "home", new  Address() {
                    Street = "2720  Sundown Lane",
                    City = "Kentucketsville",
                    State = "Calousiyorkida",
                    Zip = "99978",
                }},
            { "work", new  Address() {
                    Street = "1600 Pennsylvania Avenue NW",
                    City = "Washington",
                    State = "District of Columbia",
                    Zip = "20500",
                }},
        }
    };
    
    var serializer = new SerializerBuilder()
        .WithNamingConvention(CamelCaseNamingConvention.Instance)
        .Build();
    var yaml = serializer.Serialize(person);
    System.Console.WriteLine(yaml);
    // Output: 
    // name: Abe Lincoln
    // age: 25
    // heightInInches: 6.3333334922790527
    // addresses:
    //   home:
    //     street: 2720  Sundown Lane
    //     city: Kentucketsville
    //     state: Calousiyorkida
    //     zip: 99978
    //   work:
    //     street: 1600 Pennsylvania Avenue NW
    //     city: Washington
    //     state: District of Columbia
    //     zip: 20500

    反序列化 YAML 到对象

    using YamlDotNet.Serialization;
    using YamlDotNet.Serialization.NamingConventions;
    ...
    
    var yml = @"
    name: George Washington
    age: 89
    height_in_inches: 5.75
    addresses:
      home:
        street: 400 Mockingbird Lane
        city: Louaryland
        state: Hawidaho
        zip: 99970
    ";
    
    var deserializer = new DeserializerBuilder()
        .WithNamingConvention(UnderscoredNamingConvention.Instance)  // see height_in_inches in sample yml 
        .Build();
    
    //yml contains a string containing your YAML
    var p = deserializer.Deserialize<Person>(yml);
    var h = p.Addresses["home"];
    System.Console.WriteLine($"{p.Name} is {p.Age} years old and lives at {h.Street} in {h.City}, {h.State}.");
    // Output:
    // George Washington is 89 years old and lives at 400 Mockingbird Lane in Louaryland, Hawidaho.

    转换 YAML 为 JSON 格式

    var r = new StringReader(@"
    scalar: a scalar
    sequence:
      - one
      - two
    ");
    var deserializer = new DeserializerBuilder().Build();
    var yamlObject = deserializer.Deserialize(r);
    
    var serializer = new SerializerBuilder()
    	.JsonCompatible()
    	.Build();
    
    var json = serializer.Serialize(yamlObject);
    
    Console.WriteLine(json);

    该代码会产生以下输出:

    {"scalar": "a scalar", "sequence": ["one", "two"]}

    欢迎来到:码农很忙
  • 相关阅读:
    jtopo
    转载model2
    转载model
    Vue -- 后台系统布局导航栏
    Vue -- iview表格 axiso调用接口数据
    Vue -- 视频&&下载 组件
    Vue -- echarts 折线图demo
    Vue -- axios封装
    Vue -- 验证码
    01 & 02 & 03笔记
  • 原文地址:https://www.cnblogs.com/Soar1991/p/14374156.html
Copyright © 2020-2023  润新知