Azure Blob 列表键 JsonSerializer.Deserialize 返回空 C#

Azure Blob list keys JsonSerializer.Deserialize returning null C#

我要进行一个非常简单的反序列化。基本上我所做的就是检索以下 json 并反序列化为 Microsoft.Azure.Management.Storage.ModelsStorageAccountListKeysResult:

{\"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\"}

我多次检查了 json 结果并与模型进行了比较,对我来说似乎一切都很好,但我得到 null 作为反序列化的结果。

代码如下:

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); // returns null

我错过了什么?

编辑:

我刚刚意识到 StorageAccountListKeysResult 的属性没有 setter。

请尝试将 JSON 中的 Keys 属性更改为 keys。您的 json 应如下所示:

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\"}]}";

参考:https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.storage.models.storageaccountlistkeysresult.keys?view=azure-dotnet#Microsoft_Azure_Management_Storage_Models_StorageAccountListKeysResult_Keys

[Newtonsoft.Json.JsonProperty(PropertyName="keys")]
public System.Collections.Generic.IList<Microsoft.Azure.Management.Storage.Models.StorageAccountKey> Keys { get; }

问题已通过 Newtonsoft 解决。 Microsoft 使用 Newtonsoft StorageAccountListKeysResult,所以我想这就是问题所在。