Десериализация списка сообщений с помощью protobuf-net - PullRequest
1 голос
/ 16 сентября 2010

У меня есть Java-бэкэнд, который отправляет сообщения с использованием protobuf, он отправляет объекты сообщений с разделителями в виде одного большого байтового массива BLOB через TIB. Я могу десериализовать их нормально, используя функцию parseDelimitedFrom (yourStreamHere) в Java, но на стороне C # у нас есть некоторые проблемы, и я не могу найти никаких примеров, но я могу просто упустить что-то очевидное здесь.

Мы делаем что-то в C #, как это

using (MemoryStream mem = new MemoryStream()) 
{ 
    mem.Write(byteArray, 0, byteArray.Length); 
    mem.Position = 0;     
    return Serializer.Deserialize<List<OrderState>>(mem); 
}

Примечание: я видел более старый пост об этом, но он выглядел довольно устаревшим, и я думаю, что с тех пор произошли изменения в protobuf-net, но исправьте, если я ошибаюсь

1 Ответ

1 голос
/ 16 сентября 2010

Вчера разработчик использовал тег 0 и стиль префикса 128 как-то так:

IEnumerable<SomeObject> list =  (Serializer.DeserializeItems<SomeObject>(memoryStream, PrefixStyle.Base128, 0));

но мы все еще получали ошибку. Когда мы сегодня вызвали getProto на стороне C #, оказалось, что мы конвертировали наши свойства, для которых был задан тип double, в тип fixed64, на стороне java, которую мы указали в double, поэтому я думаю, что это несовпадение стало причиной ошибок, которые мы видели. Мы временно изменили эти поля на строковый тип, и теперь приведенный выше фрагмент работает. Конечно, в идеале мы не хотим отправлять строки, когда нам не нужно.

...