在 .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
"
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 YAMLvar 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"]}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值