Я использую среду Spring.Rest.
Если мы получим 402, тело будет содержать протокол, который в свою очередь будет содержать различную информацию об ошибках.
Исключение, созданное на 402, является экземпляром Spring.Rest.Client.HttpClientErrorException.
Ответ в исключении является экземпляром Spring.HttpResponseMessage.
Тело в ответе имеет тип byte [].
Это означает, что у меня есть байт [], пока десериализатор ожидает поток.
Для десериализации прото, содержащегося в теле, я сделал следующее:
MemoryStream mStream = new MemoryStream();
mStream.Write(exception.Response.Body,0,exception.Response.Body.Length);
var proto = Serializer.Deserialize<XXXRestProtoException>(mStream);
когда я проверяю возвращенный прото, все его свойства равны нулю.
Верен ли мой подход, или мне нужно сделать больше, прежде чем представлять Stream в методе десериализации?
Мы подтвердили, что определения прототипов, используемые на клиенте и сервере, синхронизированы, а тело хорошо сформировано на сервере.
Поток, созданный этим кодом, имеет ту же длину и содержимое, что и данный байт [], что, в свою очередь, соответствует заголовку content-length.