using System.Collections;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public class IPAddressConverter : JsonConverter
public override bool CanConvert(Type objectType)
return typeof(IPAddress).IsAssignableFrom(objectType);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
if (reader.TokenType == JsonToken.Null)
var token = JToken.Load(reader);
if (token.Type == JTokenType.Bytes)
var bytes = (byte[])token;
return new IPAddress(bytes);
return IPAddress.Parse(s);
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
var ip = (IPAddress)value;
writer.WriteValue(ip.ToString());
public IPAddress RightTesterIP;
public IPAddress LeftTesterIP;
public static void Test()
var settings = new Settings
RightTesterIP = IPAddress.Parse("192.168.0.1"),
LeftTesterIP = IPAddress.Parse("2001:0db8:85a3:0000:0000:8a2e:0370:7334"),
var jsonSettings = new JsonSerializerSettings
Converters = new [] { new IPAddressConverter() },
var json = JsonConvert.SerializeObject(settings, jsonSettings);
Console.WriteLine("Serialized Settings: ");
var settings2 = JsonConvert.DeserializeObject<Settings>(json, jsonSettings);
var json2 = JsonConvert.SerializeObject(settings2, jsonSettings);
Console.WriteLine("Deserialized and re-serialized Settings: ");
Console.WriteLine(json2);
public static void Main()
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);