Merge pull request #833 from craftworkgames/rectanglef_serializer

Rectanglef serializer
This commit is contained in:
Max Kopjev
2024-01-03 20:05:28 +01:00
committed by GitHub
3 changed files with 59 additions and 1 deletions
@@ -14,6 +14,7 @@ namespace MonoGame.Extended.Serialization
Converters.Add(new RangeJsonConverter<float>());
Converters.Add(new RangeJsonConverter<HslColor>());
Converters.Add(new ThicknessJsonConverter());
Converters.Add(new RectangleFJsonConverter());
Converters.Add(new TextureAtlasJsonConverter(contentManager, contentPath));
Converters.Add(new Size2JsonConverter());
@@ -22,4 +23,4 @@ namespace MonoGame.Extended.Serialization
Formatting = Formatting.Indented;
}
}
}
}
@@ -0,0 +1,24 @@
using System;
using Newtonsoft.Json;
namespace MonoGame.Extended.Serialization;
public class RectangleFJsonConverter: JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var rect = (RectangleF)value;
writer.WriteValue($"{rect.Left} {rect.Top} {rect.Width} {rect.Height}");
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var values = reader.ReadAsMultiDimensional<float>();
return new RectangleF(values[0], values[1], values[2], values[3]);
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(RectangleF);
}
}
@@ -0,0 +1,33 @@
using System.IO;
using MonoGame.Extended.Serialization;
using Newtonsoft.Json;
using Xunit;
namespace MonoGame.Extended.Tests.Serialization;
public class RectangleFJsonConverterTest
{
public class TestContent
{
public RectangleF Box { get; set; }
}
[Fact]
public void ConstructorTest()
{
var jsonData = @"
{
box: ""1 1 10 10""
}
";
var serializer = new JsonSerializer();
serializer.Converters.Add(new RectangleFJsonConverter());
var content = serializer.Deserialize<TestContent>(new JsonTextReader(new StringReader(jsonData)));
Assert.Equal(1, content.Box.Left);
Assert.Equal(1, content.Box.Top);
Assert.Equal(10, content.Box.Width);
Assert.Equal(10, content.Box.Height);
}
}