如何使用JSON.Net将System.Drawing.Size序列化/序列化为对象?
我完全不知道怎么做。
我使用的示例类:
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
的实例传递给DeserializeObject
:
string json = @"{""Size"":{""width"":80,""height"":24}}"; MyClass c = JsonConvert.DeserializeObject(json, new SizeJsonConverter()); Console.WriteLine(c.Size.Width + "x" + c.Size.Height);
输出:
80x24
您可以使用JsonProperty,而不是每次都将每个单独的属性强制为json结果。
public class MyClass { [JsonProperty("size")] public Size size; }
这是你的Size类
public class Size { public Size(int w, int h) { this.Width = w; this.Height = h; } [JsonProperty("width")] public int Width { get; set; } [JsonProperty("height")] public int Height { get; set; } }
这就是你访问它的方式
MyClass w = new MyClass{ size = new Size(5, 7) }; string result = JsonConvert.SerializeObject(w);
这就是你得到的
{"Size":{"width":5,"height":7}}
这样,每次在Size类甚至MyClass类中添加新属性时,只需要将JsonProperty属性放在其上。
上述就是C#学习教程:如何使用JSON.Net将System.Drawing.Size序列化/序列化为对象?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1014123.html