¿Qué FieldCodec se debe utilizar al escribir un RepeatedField byte a byte en un MemoryStream?
El SDK de protobuf para C# contiene un proyecto de ejemplo llamado AddPerson.cs.
Utiliza el archivo addressbook.proto, el cual define un campo repetido:
repeated PhoneNumber phones = 4;
Estoy intentando agregar una función a AddPerson.cs, la cual crearía un string MD5 del campo repetido:
private string RepeatedFieldToMD5String<T>(RepeatedField<T> repeatedField)
{
MemoryStream memoryStream = new MemoryStream();
repeatedField.WriteTo(new CodedOutputStream(memoryStream), new FieldCodec<T>());
return string.Concat
(
MD5.Create().ComputeHash
(
memoryStream
).Select(x => x.ToString("x2"))
);
}
El problema es que no hay tal constructor para el FieldCodec
, necesita algunos argumentos.
Supongo que tengo que decirle “por favor, toma un FieldCodec que sea adecuado para escribir un objeto byte por byte en una matriz” … pero ¿cómo se dice eso en C#? 🙂
En el archivo FieldCodec.cs vi un método FieldCodec.ForBytes()
, pero necesita una etiqueta. ¿Cuál sería una etiqueta adecuada aquí?
La razón por la que hago esta pregunta es que estoy intentando tomar un campo RepeatedField
en mi proyecto real, generar un string MD5 sobre todo esto y usarlo en el encabezado HTTP If-None-Match/ETag.
davy.ai
Estás intentando agregar una función al archivo
AddPerson.cs
que crearía una cadena MD5 a partir del campo repetido. Has notado que el constructorFieldCodec
requiere algunos argumentos y no estás seguro de qué etiqueta usar para el métodoFieldCodec.ForBytes()
. Estás intentando usar la cadena MD5 en la cabecera HTTP If-None-Match/ETag.Si entiendo correctamente, estás buscando una forma de generar una cadena MD5 a partir de un objeto
RepeatedField
. Puedes usar el métodoFieldCodec.ForBytes()
para generar una etiqueta adecuada para el constructorFieldCodec
. La etiqueta debe ser un identificador único para el objetoRepeatedField
. Luego puedes usar el objetoFieldCodec
para escribir el objetoRepeatedField
en unMemoryStream
y generar la cadena MD5 a partir del stream.