Попытка заставить де -сериализацию 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: