es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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 de StorageAccountListKeysResult, 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:

    public class StorageAccountListKeysResult
    {
        public List<storageaccountkey> Keys { get; set; }
    }
    
    public class StorageAccountKey
    {
        public DateTimeOffset CreationTime { get; set; }
        public string KeyName { get; set; }
        public string Value { get; set; }
        public string Permissions { get; set; }
    }
    

    Con esta modificación, la deserialización debería funcionar como se espera y la propiedad Keys de StorageAccountListKeysResult contendrá una lista de objetos StorageAccountKey.

Comments are closed.