Использование Protobuf в.Net Core с файлами.proto

Я пытаюсь использовать Protobuf для передачи данных между моими Microservices, и я использую поддержку C# в Google.ProtoBuf и не ProtoBuf-Net, так как я хочу скомпилировать классы из .proto files,

Причина этого в том, что микросервисы не являются строго.Net. Некоторые из написаны в Go и т.п.

Я ищу что-то вроде ProtoBufFormatter в упаковке WebApiContrib.Formatting.ProtoBuf, но поддержка Google.ProtoBuf,

ProtoBufFormatter возвращает сериализованные данные protobuf, если клиент установил тип контента в application/x-protobuf, иначе Json,

Как я могу добиться чего-то похожего для Google.ProtoBuf? Кроме того, я также собираюсь найти такую ​​поддержку Nancy Framework на.Net Core.

Я нашел эту ссылку, где объясняется, как использовать файлы Protobuf с Protobuf-Net, но она не выглядит актуальной (.Net Core + VSCode).

1 ответ

Я не мог найти решение для моего варианта использования с Google.Protobufтак что я использовал кастом InputFormatter а также OutputFormatter как в этом сообщении в блоге, с Protobuf-Net,

Затем для вызова и десериализации содержимого protobuf на клиенте я предложил следующее решение:

        var client = new System.Net.Http.HttpClient { BaseAddress = new Uri("http://localhost:5002") };
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-protobuf"));
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        var response = await client.GetAsync("api/home");
        if (response.IsSuccessStatusCode)
        {   
            if (response.Content.Headers.ContentType.MediaType == "application/x-protobuf")
            {             
                using(var stream = await response.Content.ReadAsStreamAsync())
                {
                    var protoBufModel = ProtoBuf.Serializer.Deserialize<ProtobufModelDto>(stream);
                    return $"{protoBufModel.Name}, {protoBufModel.StringValue}, {protoBufModel.Id}";
                }
            }

            var content = await response.Content.ReadAsStringAsync();
            var jsonModel = JsonConvert.DeserializeObject<ProtobufModelDto>(content);
            return $"{jsonModel.Name}, {jsonModel.StringValue}, {jsonModel.Id}";
        }

        return "Failed";

Следующим шагом будет выяснить, как создавать модели из .proto файлы с Protobuf-Net,

Другие вопросы по тегам