Azure Blob lista claves JsonSerializer.Deserialize devuelve null en C#
Tengo que realizar una deserialización muy simple. Básicamente, lo que hago es recuperar el siguiente json y deserializarlo como StorageAccountListKeysResult
de Microsoft.Azure.Management.Storage.Models
:
{\"creationTime\":\"2021-12-17T12:26:19.5708372Z\",\"keyName\":\"key1\",\"value\":\"qzyyzfNe1bkhBeOVYNXiQ6BjVlDnLsnDWhVqhTrD6whPE78kf/1A/jNeQsUjMvQVnl3dtdKxZmsuMjlx3ru7Q==\",\"permissions\":\"FULL\"},{\"creationTime\":\"2021-12-17T12:26:19.5708372Z\",\"keyName\":\"key2\",\"value\":\"t+4ao7yMyWvqoiSjrNCH5gPtDC7+Qnow2SdPoFXzOXkPyBrOex/BVUPXtGFW78XAXrQ7ITDZnC8RIyXe5jVaQ==\",\"permissions\":\"FULL\"}
He verificado varias veces el resultado json y lo he comparado con el modelo, y todo me parece correcto, pero obtengo null
como resultado de la deserialización.
Aquí está el código:
var serializerOptions = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
var json = "{\"Keys\":[{\"creationTime\":\"2021-12-17T12:26:19.5708372Z\",\"keyName\":\"key1\",\"value\":\"qzyyzfNe1bkhBeOVYNXiQ6BjVlDnLsnDWhVqhTrD6whPE78kf/1A/jNeQsUjMvQVnl3dtdKxZmsuMjlx3ru7Q==\",\"permissions\":\"FULL\"},{\"creationTime\":\"2021-12-17T12:26:19.5708372Z\",\"keyName\":\"key2\",\"value\":\"t+4a7oyMyWvqoiSjrNCH5gPtDC7+Qnow2SdPoFXzOXkPyBrOex/BVUPXtGFW78XAXrQ7ITDZnC8RIyXe5jVaQ==\",\"permissions\":\"FULL\"}]}";
var listKeys = JsonSerializer.Deserialize<StorageAccountListKeysResult>(json, serializerOptions); // devuelve null
¿Qué me estoy perdiendo?
EDITAR:
Me acabo de dar cuenta de que las propiedades de StorageAccountListKeysResult
no tienen setters.
davy.ai
Basado en el código proporcionado, parece que
StorageAccountListKeysResult
no tiene ningún método público para establecer las propiedades. Esto significa que cuando se deserializa JSON en una instancia deStorageAccountListKeysResult
, las propiedades no pueden inicializarse, lo que resulta en que se devuelvan valores nulos.Para solucionar este problema, puedes modificar la clase
StorageAccountListKeysResult
para incluir métodos públicos para establecer las propiedades:Con esta modificación, la deserialización debería funcionar como se espera y la propiedad
Keys
deStorageAccountListKeysResult
contendrá una lista de objetosStorageAccountKey
.