Могу ли я десериализовать прото в тип объекта - PullRequest
0 голосов
/ 21 октября 2018

Известно, что protobuf-net не создан для динамической обработки данных, но если сериализовать объект в файл прото, я могу снова десериализовать его в объект и использовать как динамический.

Как пример:

object p = new
{
    Value = "Test"
};

//Saving object to file works perfectly
using (var file = File.Create("test.bin"))
{
    Serializer.Serialize(file, p);
}

//But this doesn't
using (var file = File.OpenRead("test.bin"))
{
    dynamic data = Serializer.Deserialize<object>(file);
    Console.WriteLine(data.Id);
}

Есть ли способ десериализации прото в тип объекта?

1 Ответ

0 голосов
/ 22 октября 2018

Прямо сейчас: нет.Отчасти потому, что в этом нет необходимости, а отчасти потому, что .proto неоднозначен без дополнительной информации.Эта информация обычно предоставляется либо файлом схемы .proto, либо (в случае protobuf-net) через атрибуты кода.Без этого контекста существует много значений, которые не могут быть правильно интерпретированы.

Добавление истинной dynamic поддержки находится в списке пожеланий, которые могут потребовать расследования, но согласно приведенному выше: если вы этого не сделаетеType, вам нужно будет предоставить дескриптор сообщения (это может быть скомпилировано как .proto, или как текст, гипотетически - так как protobuf-net имеет полностью управляемый анализатор схемы).

Еслиу вас есть Type, но только что у вас есть <T>, затем обратите внимание, что protobuf-net также имеет полный неуниверсальный API, который принимает Type в качестве входных данных.

...