我完全不知道该怎么做。
我使用的示例类:
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/