備忘録

備忘録

C#のシリアライズ、デシリアライズ方法まとめ

Ⅰ. はじめに

タイトルの通り「C#のシリアライズ、デシリアライズ方法まとめ」です。

例として以下クラスを利用します

public class User
{
  public required uint Id { get; set; }
  public required string Name { get; set; }
}

var users = new User[]
{
  new() {Id = 1, Name = "user001" },
  new() {Id = 2, Name = "user002" }
};

Ⅱ. まとめ

Newtonsoft.Json

var json = JsonConvert.SerializeObject(users);
users = JsonConvert.DeserializeObject<User[]>(json);

System.Text.Json

var json = JsonSerializer.Serialize(users);
users = JsonSerializer.Deserialize<User[]>(json);

System.Text.Json (UTF-8 Bytes)

var bytes = JsonSerializer.SerializeToUtf8Bytes(users);
users = JsonSerializer.Deserialize<User[]>(bytes);

MessagePack

var bytes = MessagePackSerializer.Serialize(users, ContractlessStandardResolver.Options);
users = MessagePackSerializer.Deserialize<User[]>(bytes, ContractlessStandardResolver.Options);

// private プロパティもシリアライズする場合は以下を指定する
// MessagePack.Resolvers.DynamicObjectResolverAllowPrivate.Options

MemoryPack

+ [MemoryPackable]
- public class User
+ partial class User
{
    public required uint Id { get; set; }
    public required string Name { get; set; }
}
var bytes = MemoryPackSerializer.Serialize(users);
users = MemoryPackSerializer.Deserialize<User[]>(bytes);