c# – 如何使用包含图像属性的json.net将对象序列化为json
发布时间:2020-12-15 23:49:37 所属栏目:百科 来源:网络整理
导读:我有一个具有许多公共属性的对象,其中一个属于image类型.我试图使用json.net序列化这个并假设我需要对此进行base64编码并序列化结果字符串.我已尝试使用BinaryConverter对抗该属性,但未成功 public class Person{ public string name { get; set; } public i
我有一个具有许多公共属性的对象,其中一个属于image类型.我试图使用json.net序列化这个并假设我需要对此进行base64编码并序列化结果字符串.我已尝试使用BinaryConverter对抗该属性,但未成功
public class Person { public string name { get; set; } public int age { get; set; } [JsonConverter(typeof(BinaryConverter))] public Image photo { get; set; } public string ToJson() { return JsonConvert.SerializeObject(this); } } 使用此测试代码调用时… var p = new Person(); p.name = "John Doe"; p.age = 99; p.photo = Image.FromFile(@"dea4007a-c812-41e9-b09a-c7793c6e853d.jpg"); var json = p.ToJson(); Console.WriteLine(json); Console.ReadKey(); 我在写二进制文件时遇到异常“意外的值类型”.任何帮助都会非常有用,因为我一直在网上搜索一段时间但没有成功. 解决方法
Json.NET不知道什么是Image,所以你必须帮助它,例如使用转换器(BinaryConverter不用于图像):
public class ImageConverter : JsonConverter { public override object ReadJson(JsonReader reader,Type objectType,object existingValue,JsonSerializer serializer) { var base64 = (string)reader.Value; // convert base64 to byte array,put that into memory stream and feed to image return Image.FromStream(new MemoryStream(Convert.FromBase64String(base64))); } public override void WriteJson(JsonWriter writer,object value,JsonSerializer serializer) { var image = (Image) value; // save to memory stream in original format var ms = new MemoryStream(); image.Save(ms,image.RawFormat); byte[] imageBytes = ms.ToArray(); // write byte array,will be converted to base64 by JSON.NET writer.WriteValue(imageBytes); } public override bool CanConvert(Type objectType) { return objectType == typeof(Image); } } public class Person { public string name { get; set; } public int age { get; set; } [JsonConverter(typeof(ImageConverter))] public Image photo { get; set; } public string ToJson() { return JsonConvert.SerializeObject(this); } } 然后它会很好地序列化和反序列化你的类. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |