MessagePack-CSharp  序列化 System.Drawing.Color结构或Point结构

如题,直接序列化会报错, 好像百度不到, 自已看了半个小时的官方文档, 摸索出来了, 需要 实现一个 IMessagePackFormatter<Color> 接口, 代码如下:

 1 using MessagePack; 2 using MessagePack.Formatters; 3 using MessagePack.Resolvers; 4 using System; 5 using System.Drawing; 6  7 namespace MessageTest 8 { 9     internal class Program10     {11         private static void Main(string[] args)12         {13             // 不想用属性特性的话,就需要下两行代码.14             var resolver = MessagePack.Resolvers.CompositeResolver.Create(15                 StandardResolver.Instance,16                 CompositeResolver.Create(ColorFormatter.Instance)17             );18 19             var options = MessagePackSerializerOptions.Standard.WithResolver(resolver);20             MessagePackSerializer.DefaultOptions = options;21 22             var bin = MessagePackSerializer.Serialize(new IntKeySample() { S = Color.Red });23 24             var obj = MessagePackSerializer.Deserialize<IntKeySample>(bin);25 26             Console.Write(obj.S);27 28             Console.Read();29         }30     }31 32     [MessagePackObject]33     public class IntKeySample34     {35         [Key(3)]36         public int A { get; set; }37 38         [Key(10)]39         public int B { get; set; }40 41         [Key(1)]42         //[MessagePackFormatter(typeof(ColorFormatter))] 序列化 像main函数中 初始化 resolver 后就不需要该行43         public Color S { get; set; }44     }45 46     public class ColorFormatter : IMessagePackFormatter<Color>47     {48         public static ColorFormatter Instance = new ColorFormatter();49 50         public Color Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)51         {52             var a = reader.ReadByte();53             var r = reader.ReadByte();54             var g = reader.ReadByte();55             var b = reader.ReadByte();56 57             return Color.FromArgb(a, r, g, b);58         }59 60         public void Serialize(ref MessagePackWriter writer, Color value, MessagePackSerializerOptions options)61         {62             writer.Write(value.A);63             writer.Write(value.R);64             writer.Write(value.G);65             writer.Write(value.B);66         }67     }68 }


kotlin java 运行性能 kotlin调用java

Kotlin代码与Java代码完全兼容。 Java代码在Kotlin代码中轻松调用,Kotlin代码也可以通过Java代码的正常方式调用。 从Kotlin调用Java代码 从Kotlin文件调用Java void方法