加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);
    }
}

然后它会很好地序列化和反序列化你的类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读