在 .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 Lanecity: Louarylandstate: Hawidahozip: 99970
"
name: George Washington
age: 89
height_in_inches: 5.75
addresses:home:street: 400 Mockingbird Lanecity: Louarylandstate: Hawidahozip: 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"]}