Как лучше всего определить, можно ли сериализовать параметр универсального типа с помощью protobuf-net? - PullRequest
1 голос
/ 06 ноября 2011

Я пишу некоторые пользовательские общие структуры данных. Как я могу гарантировать, что передаваемый обобщенный тип может быть сериализован protobuf-net? Поскольку protobuf-net не зависит от интерфейсов, я не могу ограничить параметр типа таким образом. Я думал о тестировании типа во время выполнения внутри конструктора, но я даже не могу использовать PrepareSerializer<T>, потому что это зависит от типа, являющегося ссылочным типом. Я мог бы просто попробовать сериализацию и десериализацию, но в лучшем случае это кажется грязным. Какой лучший способ убедиться, что данный универсальный тип может быть сериализован?

1 Ответ

1 голос
/ 06 ноября 2011

XmlProtoSerializer должен сделать аналогичное определение. Например:

static int GetKey(TypeModel model, ref Type type, out bool isList)
{
    if (model != null && type != null)
    {
        int key = model.GetKey(ref type);
        if (key >= 0)
        {
             isList = false;
             return key;
        }
        Type itemType = TypeModel.GetListItemType(type);
        if (itemType != null)
        {
            key = model.GetKey(ref itemType);
            if (key >= 0)
            {
                isList = true;
                return key;
            }
        }
    }

    isList = false;
    return -1;
}

Если это возвращает отрицательное значение, оно не может быть сериализовано. Я мог бы сделать это доступным в более поддерживаемом bool CanSerialize(Type), если это будет полезно?

...