跳至主要內容

C#的IPAddress类 Json序列化和反序列化

MonoLogueChiC#dotnet小于 1 分钟

最近写 DanMu.Serveropen in new window 的时候想到的一个问题,网上答案比较少,就写下来记录一下。

目的

我的目的是可以序列化和反序列化 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());
    }
}