C#的IPAddress类 Json序列化和反序列化
2022年10月27日小于 1 分钟
最近写 DanMu.Server 的时候想到的一个问题,网上答案比较少,就写下来记录一下。
目的
我的目的是可以序列化和反序列化 IPAddress 类,可以序列化为 btye[]
,可以从 byte[]
和 string
反序列化。
实现
直接上代码
using System.Net;
using System.Text.Json;
using System.Text.Json.Serialization;
public class IpAddressConverter : JsonConverter<IPAddress>
{
public override IPAddress Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType != JsonTokenType.StartArray)
if (reader.TokenType == JsonTokenType.String)
return IPAddress.Parse(reader.GetString() ?? string.Empty);
reader.Read();
var e = new Queue<byte>();
while (reader.TokenType != JsonTokenType.EndArray)
{
e.Enqueue(JsonSerializer.Deserialize<byte>(ref reader, options)!);
reader.Read();
}
return new IPAddress(e.ToArray());
}
public override void Write(Utf8JsonWriter writer, IPAddress value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.GetAddressBytes());
}
}