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