blob: 28781cb4a73bf2af0fa67bab8fffe4bb70224139 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
using Newtonsoft.Json;
public class LSPAnyConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(LSPAny);
}
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
{
reader = reader ?? throw new ArgumentNullException(nameof(reader));
switch (reader.TokenType)
{
case JsonToken.Null:
return null;
case JsonToken.Integer:
return new LSPAny(serializer.Deserialize<long>(reader));
case JsonToken.Float:
return new LSPAny(serializer.Deserialize<float>(reader));
case JsonToken.Boolean:
return new LSPAny(serializer.Deserialize<bool>(reader));
case JsonToken.String:
return new LSPAny(serializer.Deserialize<string>(reader));
case JsonToken.StartArray:
List<object>? l = serializer.Deserialize<List<object>>(reader);
if (l == null)
{
return null;
}
return new LSPAny(new LSPArray(l));
case JsonToken.StartObject:
Dictionary<string, object?>? o = serializer.Deserialize<Dictionary<string, object?>>(reader);
if (o == null)
{
return null;
}
return new LSPAny(new LSPObject(o));
}
throw new JsonSerializationException($"Unexpected token type '{reader.TokenType}' while deserializing '{objectType.Name}'.");
}
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
{
if (value is null)
{
writer.WriteNull();
}
else
{
serializer.Serialize(writer, ((LSPAny)value).Value);
}
}
}
|