diff --git a/UIX/Microsoft/Iris/Debug/Symbols/DebugSymbolsJsonParser.cs b/UIX/Microsoft/Iris/Debug/Symbols/DebugSymbolsJsonParser.cs index 0331f59..06c5375 100644 --- a/UIX/Microsoft/Iris/Debug/Symbols/DebugSymbolsJsonParser.cs +++ b/UIX/Microsoft/Iris/Debug/Symbols/DebugSymbolsJsonParser.cs @@ -1,14 +1,42 @@ using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; namespace Microsoft.Iris.Debug.Symbols; public static class DebugSymbolsJsonParser { - public static ApplicationDebugSymbols ParseForApplication(string json) => JsonConvert.DeserializeObject(json); + private static JsonSerializerSettings _settings = new() + { + Converters = [new SourceSpanJsonConverter()], + }; - public static FileDebugSymbols ParseForFile(string json) => JsonConvert.DeserializeObject(json); + public static ApplicationDebugSymbols ParseForApplication(string json) => + JsonConvert.DeserializeObject(json, _settings); - public static string Serialize(ApplicationDebugSymbols symbols) => JsonConvert.SerializeObject(symbols); + public static FileDebugSymbols ParseForFile(string json) => + JsonConvert.DeserializeObject(json, _settings); - public static string Serialize(FileDebugSymbols symbols) => JsonConvert.SerializeObject(symbols); + public static string Serialize(ApplicationDebugSymbols symbols) => + JsonConvert.SerializeObject(symbols, _settings); + + public static string Serialize(FileDebugSymbols symbols) => + JsonConvert.SerializeObject(symbols, _settings); + + private class SourceSpanJsonConverter : JsonConverter + { + public override bool CanConvert(Type objectType) => objectType == typeof(SourceSpan); + + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var span = (SourceSpan)value; + JArray array = [span.Start, span.End]; + array.WriteTo(writer); + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + throw new NotImplementedException(); + } + } }