c# - 如何使用 JSON.Net 将 System.Drawing.Size 反序列化/序列化为对象?

标签 c# json serialization json.net

我完全不知道该怎么做。

我使用的示例类:

class MyClass
{

    private Size _size = new Size(0, 0);

    [DataMember]
    public Size Size
    {
        get { return _size; }
        set { _size = value; }
    }
}

这被序列化为 {size: "0, 0"}。我需要的是 {size: {width: 0, height: 0}}

感谢任何帮助,谢谢。

最佳答案

这是一个简单的 JsonConverter 你可以用来制作System.Drawing.Size序列化你想要的方式:

using System;
using System.Drawing;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public class SizeJsonConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(Size));
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        Size size = (Size)value;
        JObject jo = new JObject();
        jo.Add("width", size.Width);
        jo.Add("height", size.Height);
        jo.WriteTo(writer);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JObject jo = JObject.Load(reader);
        return new Size((int)jo["width"], (int)jo["height"]);
    }
}

要使用转换器,您只需将它的实例传递给 JsonConvert.SerializeObject如下图:

MyClass widget = new MyClass { Size = new Size(80, 24) };
string json = JsonConvert.SerializeObject(widget, new SizeJsonConverter());
Console.WriteLine(json);

这将给出以下输出:

{"Size":{"width":80,"height":24}}

反序列化的工作方式相同;将转换器的实例传递给 DeserializeObject<T> :

string json = @"{""Size"":{""width"":80,""height"":24}}";
MyClass c = JsonConvert.DeserializeObject<MyClass>(json, new SizeJsonConverter());
Console.WriteLine(c.Size.Width + "x" + c.Size.Height);

输出:

80x24

关于c# - 如何使用 JSON.Net 将 System.Drawing.Size 反序列化/序列化为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21471404/

相关文章:

json - ElasticSearch:查询嵌套列表中的特定位置

c# - 是否可以隐藏继承的数据成员?

c# - 如何正确地从 WCF DatacontractSerializer 迁移到 Protobuf-net?

c# - 在 IValueConverter 中使用 FindResource

c# - 在 KeyValuePair 键上相交列表?

python - 在python中递归地删除json对象列表中的null/空值

iphone - iPhone SDK-如何序列化ABRecord?

javascript - 登录后更改按钮文本 "Sign Out"

c# - 无法加载文件或程序集,PublicKeyToken=null

json - 如何使用组合从 SwiftUI 中的 URL 解析单个 JSON 对象?