/// <summary>
/// Класс [де]сериализуемый MemoryPack
/// <br />Необходим для добавления всем наследуемым классам метода сериализации через расширение
/// <br />Наследование данного метода не работает из-за каста в целевой класс
/// </summary>
public class Packable { }
/// <summary>
/// Расширение для [де]сериализуемых классов MemoryPack
/// </summary>
public static class PackableExtension
{
/// <summary>
/// Сериализовать класс в массив байтов
/// </summary>
/// <typeparam name="T">Целевой класс</typeparam>
/// <param name="data">Объект целевого класса</param>
/// <returns></returns>
public static byte[] Pack<T>(this T data) where T : Packable
=> MemoryPackSerializer.Serialize(data);
/// <summary>
/// Десериализовать класс из массива байтов
/// </summary>
/// <typeparam name="T">Целевой класс</typeparam>
/// <param name="data">Массив байт</param>
/// <returns></returns>
public static T Unpack<T>(this byte[] data) where T : Packable
=> MemoryPackSerializer.Deserialize<T>(data);
}
{
"Header": {
"CoverPage": {
"Title": { "Content": "data" }
}
}
}
// <auto-generated />
//
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
//
// using QuickType;
//
// var data = Data.FromJson(jsonString);
namespace QuickType
{
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class Data
{
[JsonProperty("Header")]
public Header Header { get; set; }
}
public partial class Header
{
[JsonProperty("CoverPage")]
public CoverPage CoverPage { get; set; }
}
public partial class CoverPage
{
[JsonProperty("Title")]
public Title Title { get; set; }
}
public partial class Title
{
[JsonProperty("Content")]
public string Content { get; set; }
}
public partial class Data
{
public static Data FromJson(string json) => JsonConvert.DeserializeObject<Data>(json, QuickType.Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this Data self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters =
{
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
}
public struct Organization
{
public UInt64 Asn;
public string Name;
}
var tree = ArrayTree<Organization>();
var org1 = new Organization() { Asn = 13238, Name = "YANDEX LLC" };
tree.Add(IPAddress.Parse("5.45.192.0").GetAddressBytes(), org1);