Skip to content

Commit

Permalink
Merge pull request #833 from craftworkgames/rectanglef_serializer
Browse files Browse the repository at this point in the history
Rectanglef serializer
  • Loading branch information
Gandifil committed Jan 3, 2024
2 parents 232156b + fd760e3 commit 801196c
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public MonoGameJsonSerializer(ContentManager contentManager, string contentPath,
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());

Expand All @@ -22,4 +23,4 @@ public MonoGameJsonSerializer(ContentManager contentManager, string contentPath,
Formatting = Formatting.Indented;
}
}
}
}
24 changes: 24 additions & 0 deletions src/cs/MonoGame.Extended/Serialization/RectangleFJsonConverter.cs
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}

0 comments on commit 801196c

Please sign in to comment.