CosmosDB 更新 c#:无法确定类型 System.String[] 的 JSON 对象类型
CosmosDB Update c#: Could not determine JSON object type for type System.String[]
我想将 CosmosDB 中的字段更新为如下数组:
“别名”:[
“约翰”,
“强尼”
],
下面是我的代码:
dynamic GuideDoc= new
{
id = "00B2845F-F394-5E93-9A26-E70000452562",
type = "Guide",
GuideGuid= "00B2845F-F394-5E93-9A26-E70000452562"
};
ItemResponse<dynamic> clientGuideResponse1 = await this.container.ReadItemAsync<dynamic>(GuideGuid, new PartitionKey(PartitionKey));
dynamic itemBody1 = clientGuideResponse1.Resource;
String[] AliasesConverted= JSONDecoders.DecodeJSONArray(AliasesValues);
itemBody1.Aliases= AliasesConverted;
GuideDoc= itemBody1;
GuideResponse = await this.container.ReplaceItemAsync<dynamic>(GuideDoc, GuideGuid, new PartitionKey(PartitionKey));
将数据存储到 itemBody1.Aliases 的部分返回错误“无法确定类型 System.String[] 的 JSON 对象类型”
如何让它将值作为数组保存到 Aliases?
在保持其他一切不变的同时添加新属性的最简单方法是将其反序列化为 Dictionary
。例如:
var response = await container.ReadItemAsync<Dictionary<string, object>>(id, partitionKey);
var item = response.Resource;
item["Aliases"] = new[] { "John", "Johnny" };
await container.ReplaceItemAsync(item, id, partitionKey);
它不起作用的原因是当您使用 dynamic
作为类型时,反序列化器会将 return 结果作为 JObject
。您无法通过属性导航 JObject
,就像它被反序列化为具有属性的 class 一样。你描述的错误与我想象的有点不同。
我想将 CosmosDB 中的字段更新为如下数组:
“别名”:[ “约翰”, “强尼” ],
下面是我的代码:
dynamic GuideDoc= new
{
id = "00B2845F-F394-5E93-9A26-E70000452562",
type = "Guide",
GuideGuid= "00B2845F-F394-5E93-9A26-E70000452562"
};
ItemResponse<dynamic> clientGuideResponse1 = await this.container.ReadItemAsync<dynamic>(GuideGuid, new PartitionKey(PartitionKey));
dynamic itemBody1 = clientGuideResponse1.Resource;
String[] AliasesConverted= JSONDecoders.DecodeJSONArray(AliasesValues);
itemBody1.Aliases= AliasesConverted;
GuideDoc= itemBody1;
GuideResponse = await this.container.ReplaceItemAsync<dynamic>(GuideDoc, GuideGuid, new PartitionKey(PartitionKey));
将数据存储到 itemBody1.Aliases 的部分返回错误“无法确定类型 System.String[] 的 JSON 对象类型”
如何让它将值作为数组保存到 Aliases?
在保持其他一切不变的同时添加新属性的最简单方法是将其反序列化为 Dictionary
。例如:
var response = await container.ReadItemAsync<Dictionary<string, object>>(id, partitionKey);
var item = response.Resource;
item["Aliases"] = new[] { "John", "Johnny" };
await container.ReplaceItemAsync(item, id, partitionKey);
它不起作用的原因是当您使用 dynamic
作为类型时,反序列化器会将 return 结果作为 JObject
。您无法通过属性导航 JObject
,就像它被反序列化为具有属性的 class 一样。你描述的错误与我想象的有点不同。