JSON.NET serialization trouble

前端 未结 1 1450
悲&欢浪女
悲&欢浪女 2021-01-17 14:01

I have a class with property type of Point ( struct in .NET Framework). I use JsonConvert from Newton.Json to serialize it to JSON. But result is

 \"Point\"         


        
相关标签:
1条回答
  • 2021-01-17 14:24

    That's because Point has defined its own TypeConverter and JSON.NET uses it to do the serialization. I'm not sure whether there is a clean way to turn this behavior off, but you can certainly create your own JsonConverter that behaves the way you want:

    class PointConverter : JsonConverter
    {
        public override void WriteJson(
            JsonWriter writer, object value, JsonSerializer serializer)
        {
            var point = (Point)value;
    
            serializer.Serialize(
                writer, new JObject { { "X", point.X }, { "Y", point.Y } });
        }
    
        public override object ReadJson(
            JsonReader reader, Type objectType, object existingValue,
            JsonSerializer serializer)
        {
            var jObject = serializer.Deserialize<JObject>(reader);
    
            return new Point((int)jObject["X"], (int)jObject["Y"]);
        }
    
        public override bool CanConvert(Type objectType)
        {
            return objectType == typeof(Point);
        }
    }
    

    You can then use it like this:

    JsonConvert.SerializeObject(
        new { Point = new Point(15, 12) },
        new PointConverter())
    
    0 讨论(0)
提交回复
热议问题