【发布时间】:2021-12-08 09:01:32
【问题描述】:
问题是用Color 从System.Drawing.Color 和System.Text.Json 序列化/反序列化一个类。
public class Test
{
public Color Farbe { get; set; }
public IEnumerable<Color> Farben { get; set; }
}
序列化
File.WriteAllText("data.json", JsonSerializer.Serialize(test));
没有任何转换器,序列化的 json 文件如下所示:
{
"Farbe": {
"R": 255,
"G": 0,
"B": 0,
"A": 255,
"...": "...",
"Name":" Red"
},
"Farben": [
{
"R":255,
"G":0,
"B":0,
"A":255,
"...": "...",
"Name":"Red"
},
{
"R":0,
"G":128,
"B":0,
"A":255,
"...": "...",
"Name":"Green"
}
]
}
无法进行反序列化。结果将为空:
Test test2 = JsonSerializer.Deserialize<Test>(File.ReadAllText("data.json"));
Console.WriteLine($"{test2.Farbe.R}:{test2.Farbe.G}:{test2.Farbe.B}");
Console.WriteLine(string.Join(',', test2.Farben));
结果
0:0:0
Color [Empty],Color [Empty],Color [Empty]
【问题讨论】:
-
这真的不是一个特别有用的问答。您正在尝试序列化一个从未打算序列化的类。
-
@DavidG - 我不同意这一点。
System.Drawing.Color有一个专门的类型转换器,所以它可以被持久化。有关序列化颜色的其他问题,另请参阅 Serializer for Drawing.Color using Json.NET 或 JSON.NET serialization of System.Drawing.Color with TypeNameHandling 或 Most elegant XML serialization of Color structure - 显然对此有需求。
标签: c# json serialization deserialization system.drawing.color