在 .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"]}