tgstation-server  4.4.0
The /tg/station 13 server suite
VersionConverter.cs
Go to the documentation of this file.
1 using Newtonsoft.Json;
2 using System;
3 using Tgstation.Server.Api;
4 
5 namespace Tgstation.Server.Host.Components.Interop.Converters
6 {
11  {
13  public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
14  {
15  if (value == null)
16  {
17  writer.WriteNull();
18  }
19  else if (value is Version version)
20  {
21  writer.WriteValue(version.Semver().ToString());
22  }
23  else
24  {
25  throw new ArgumentException("Expected Version object!", nameof(value));
26  }
27  }
28 
30  public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
31  {
32  if (reader.TokenType == JsonToken.Null)
33  return null;
34 
35  if (reader.TokenType == JsonToken.String)
36  {
37  try
38  {
39  Version v = new Version((string)reader.Value);
40  return v.Semver();
41  }
42  catch (Exception ex)
43  {
44  throw new JsonSerializationException($"Error parsing version string: {reader.Value}", ex);
45  }
46  }
47 
48  throw new JsonSerializationException(
49  $"Unexpected token or value when parsing version. Token: {reader.TokenType}, Value: {reader.Value}");
50  }
51 
53  public override bool CanConvert(Type objectType) => objectType == typeof(Version);
54  }
55 }
override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
JsonConverter for serializing Versions for BYOND.
override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)