OverviewFilesCommitsIssuesDocsReleasesPeers

ifsrenderer-linux / WpfDisplay / Serialization / IfsNodesConverter.cs

36 lines · csharp ref:
using System;
using System.Collections.Generic;
using System.Linq;

using IFSEngine.Model;

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

using WpfDisplay.Helper;

namespace WpfDisplay.Serialization;

/// <summary>
/// Serializes node positions inside the IFS json while keeping compatibility with the library.
/// </summary>
public class IfsNodeConverter : JsonConverter<IfsNodes>
{
    public override IfsNodes ReadJson(JsonReader reader, Type objectType, IfsNodes existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        JObject jo = JObject.Load(reader);
        IFS ifs = jo.ToObject<IFS>(serializer);
        var ifsnodes = new IfsNodes(ifs);
        if (jo.ContainsKey("Nodes"))
            ifsnodes.Positions = jo["Nodes"].ToObject<List<BindablePoint>>(serializer);
        return ifsnodes;
    }

    public override void WriteJson(JsonWriter writer, IfsNodes value, JsonSerializer serializer)
    {
        JObject jo = JObject.FromObject(value.IFS, serializer);
        jo["Nodes"] = JToken.FromObject(value.Positions, serializer);
        jo.WriteTo(writer, serializer.Converters.ToArray());
    }
}