簡單的說最近要用到所以就簡單看了一下,其實蠻簡單大概就是分享一下 這次我使用的是 YamlDotNet , 網路上看其他人寫關於 YAML +C# 文章是用 NetEscapades (
https://marcus116.blogspot.com/2019/06/netcore-aspnet-core-yaml.html
) ,其實我只是挑下載排名高的 : P ,我是覺得差異應該不大,等有時間再測試看看
事先作業 記得先安裝 YamlDotNet - https://www.nuget.org/packages/YamlDotNet/
1. 序列化 :
var user1 = new User { Name = "Donma", Age = 20, Birth = DateTime.Now, Key = "Key1", Salary = 1999.987654321m };
user1.Friends = new System.Collections.Generic.List();
user1.Friends.Add(new User { Name = "Donma Friend1", Age = 29, Birth = DateTime.Today, Key = "Key2", Salary = 2999.29000000m });
var serializer = new YamlDotNet.Serialization.SerializerBuilder().Build();
var yamlString1 = serializer.Serialize(user1);
Console.WriteLine(yamlString1);
Key: Key1
Name: Donma
Salary: 1999.987654321
Birth: 2021-02-03T11:24:47.2097392+08:00
Age: 20
Friends:
- Key: Key2
Name: Donma Friend1
Salary: 2999.29000000
Birth: 2021-02-03T00:00:00.0000000+08:00
Age: 29
Friends:
public class User
{
public string Key { get; set; }
public string Name { get; set; }
public decimal? Salary { get; set; }
public DateTime Birth { get; set; }
public int Age { get; set; }
public List Friends { get; set; }
}
2. 反序列化:
var deSerializer = new YamlDotNet.Serialization.DeserializerBuilder().Build();
var user2=deSerializer.Deserialize(yamlString1);
Console.WriteLine(user2.Key+","+user2.Name+","+user2.Friends.Count);
//Result
//Key1,Donma,1
3. JSON 轉 YAML -透過 JSON.net 轉換物件,我看過其他人用其他方法轉,因為我講求偷懶? 這方法可能不是很好,但是簡單有效,不好的點是在於會透過一次反序列化後再轉成 YAML,我有稍微改一下結構證明 ExpandoObject 是有效的。
var json1String = "{\"KeyTest\":\"Key1\",\"NameTest\":\"Donma\",\"SalaryTest\":1999.987654321,\"BirthTest\":\"2021-02-03T11:09:04.6288423+08:00\",\"AgeTest\":20," +
"\"Friends\":[{\"Key\":\"Key2\",\"Name\":\"Donma Friend1\",\"Salary\":2999.29000000,\"Birth\":\"2021-02-03T00:00:00+08:00\",\"Age\":29," +
"\"Friends\":null}]}";
var obj = Newtonsoft.Json.JsonConvert.DeserializeObject(json1String);
var yamlString2 = serializer.Serialize(obj);
Console.WriteLine(yamlString2);
//Result
/*
KeyTest: Key1
NameTest: Donma
SalaryTest: 1999.987654321
BirthTest: 2021-02-03T11:09:04.6288423+08:00
AgeTest: 20
Friends:
- Key: Key2
Name: Donma Friend1
Salary: 2999.29
Birth: 2021-02-03T00:00:00.0000000+08:00
Age: 29
Friends:
*/
簡單筆記一下,基本上就是跟 JSON 一樣是一種格式,在某些狀況他的封包量可能會更小..