Это старый вопрос, но я думаю, что у меня есть решение, которое может работать лучше в большинстве случаев (оно создает более короткую строку и не требует атрибута Serializable
).
Идея состоит в том, чтобы сериализовать объект в JSON, а затем преобразовать его в base64, см. Функцию расширения:
public static string ToBase64(this object obj)
{
string json = JsonConvert.SerializeObject(obj);
byte[] bytes = Encoding.Default.GetBytes(json);
return Convert.ToBase64String(bytes);
}
Чтобы создать объект, нам нужно преобразовать base64 в байты, преобразовать в строку и десериализовать JSON в T
public static T FromBase64<T>(this string base64Text)
{
byte[] bytes = Convert.FromBase64String(base64Text);
string json = Encoding.Default.GetString(bytes);
return JsonConvert.DeserializeObject<T>(json);
}