Перейти к содержанию

Создание классов, сериализуемых в Tessa BSON и типизированный Tessa JSON

Создание классов, сериализуемых в Tessa BSON и типизированный Tessa JSON

В Tessa используется модифицированный сериализатор JSON. В отличие от стандартного JSON, в описании поля после парного двоеточия (“::”) может быть указан тип данных. Пример:

{ "Alias": "RoleTypes", "CompositionID::uid": "443a5394-1db2-44d8-b519-cbc991f39fdf", "OrderPos::int": 0 }

При создании класса, содержимое которого сериализуется в типизированный JSON (например, в response.Info в расширениях на карточку), рекомендуется унаследовать его от Tessa.Platform.Storage.StorageSerializable:

[Serializable, DataContract] public sealed class CardTypeInfo : StorageSerializable {

public string Name { get; set; }

public Guid Id { get; set; }

protected override void SerializeCore(Dictionary<string, object> storage) { storage[nameof(this.Id)] = this.Id; storage[nameof(this.Name)] = this.Name; }

protected override void DeserializeCore(Dictionary<string, object> storage) { this.Id = storage.TryGet<Guid>(nameof(this.Id)); this.Name = storage.TryGet<string>(nameof(this.Name)); }

}

Кроме типизированного JSON, применяется модифицированный сериализатор BSON, где могут сериализоваться только поля примитивных типов, хеш-таблицы и списки. Для BSON-сериализации удобно использовать класс - наследник Tessa.Platform.Storage.StorageObject.

[Serializable] public sealed class CardTypeInfo : StorageObject { public CardTypeInfo() : this(new Dictionary<string, object>()) { }

public CardTypeInfo(Dictionary<string, object> storage) : base(storage) { }

private CardTypeInfo(SerializationInfo info, StreamingContext context) : base(info, context) { }

private const string IDKey = "ID"; private const string NameKey = "Name";

public Guid ID { get { return this.Get<Guid>(IDKey); } set { this.Set(IDKey, value); } }

public string Name { get { return this.Get<string>(NameKey); } set { this.Set(NameKey, value); } } }

Создаём объект, который записываем в Info:

var typeInfo = new CardTypeInfo { ID = Guid.NewGuid(), Name = "random type" };

response.Info["TypeInfo"] = typeInfo.GetStorage();

Читаем объект из Info:

var typeInfo = new CardTypeInfo(response.Info.Get<Dictionary<string, object>>("TypeInfo"));

Guid id = typeInfo.ID; string name = typeInfo.Name;

Back to top