Protobuf -net Error :Тип не ожидается, и контракт не может быть выведен :BlockHeader

Попытка заставить де -сериализацию pbf-файла openstreetmap работать должным образом, следуя информации из этой темы, а также из других источников:

Protobuf -net Десериализация открытых карт улиц

В настоящее время я использую protobug dll от r480. Я использовал protogen для создания файлов классов csharp из прототипов osm, но когда я наткнулся на этот момент в коде, где я пытаюсь прочитать из потока:

BlockHeader header;
using (var tmp = new LimitedStream(file, length))
{
    header = Serializer.Deserialize(tmp); // exception occurs here
}

Выдает следующее исключение:

InnerException: System.InvalidOperationException
Message=Type is not expected, and no contract can be inferred: BlockHeader
Source=protobuf-net
StackTrace:
  at ProtoBuf.Meta.TypeModel.ThrowUnexpectedType(Type type) in C:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 1115
  at ProtoBuf.Meta.TypeModel.TryDeserializeAuxiliaryType(ProtoReader reader, DataFormat format, Int32 tag, Type type, Object& value, Boolean skipOtherFields, Boolean asListItem, Boolean autoCreate, Boolean insideList) in C:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 848
  at ProtoBuf.Meta.TypeModel.DeserializeCore(ProtoReader reader, Type type, Object value, Boolean noAutoCreate) in C:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 582
  at ProtoBuf.Meta.TypeModel.Deserialize(Stream source, Object value, Type type, SerializationContext context) in C:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 506
  at ProtoBuf.Meta.TypeModel.Deserialize(Stream source, Object value, Type type) in C:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 488
  at ProtoBuf.Serializer.Deserialize[T](Stream source) in C:\Dev\protobuf-net\protobuf-net\Serializer.cs:line 69
  at OsmParserDemo.MainWindow.OsmParse() in C:\Users\crussell\Documents\Visual Studio 2010\Projects\OsmParseMadness\OsmParserDemo\MainWindow.xaml.cs:line 57
  at OsmParserDemo.MainWindow..ctor() in C:\Users\crussell\Documents\Visual Studio 2010\Projects\OsmParseMadness\OsmParserDemo\MainWindow.xaml.cs:line 28

Итак, сравнивая структуру кода со структурой кода protobuf -net, у меня создалось впечатление, что я могу что-то упустить в отношении идентификации каждого члена. Это правильно, или я далеко в космосе на этом? Любая помощь или подсказки приветствуются!

Изменить :Вот фрагмент BlockHeader из сгенерированного класса FileFormat.cs:

Заголовок блока

9
задан Community 23 May 2017 в 12:09
поделиться