Dotnet API为匿名对象的属性返回空数组



我正试图从我的CosmosDB中获取一个json文档。此文档的属性可能因文档而异。我对该类的定义如下:

[JsonProperty(PropertyName = "template")]
public object Template { get; set; }
[JsonProperty(PropertyName = "templateName")]
public string TemplateName { get; set; }

Template属性是一个有属性的对象,还有更多可以嵌套对象的对象等等。这是非结构化的,所以我不能用类来定义它。

当我从宇宙数据库中获得一个文档时,我可以在调试器中看到我得到了整个文档,一切看起来都很好。然而,出于某种原因,当我查看http响应时,我的API会抛出文档更改。

这里是我用来从Cosmos DB中获取文档的代码:

try
{
ItemResponse<Domain.Models.ArmTemplate> response = await container.ReadItemAsync<Domain.Models.ArmTemplate>(id, new PartitionKey(id));
return response.Resource;
}
catch(CosmosException ex) when (ex.StatusCode == System.Net.HttpStatusCode.NotFound)
{ 
return null;
}

这将返回正确的ArmTemplate对象,并且一切看起来都很好。然后返回的对象返回给控制器,控制器将其作为响应返回:

[HttpGet("{id}"]
public async Task<ArmTemplate> GetArmTemplate(string id)
{
var armTemplate = await armTemplateService.GetArmTemplateAsyncById(id);
return armTemplate
}

再次,当我在调试器中查看armTemplate的值时,一切看起来都很好。然后,当我看到我从API返回的json时,它看起来完全不同。

我粘贴了一部分响应和预期响应,因为文档不是那么小:

预期响应:

{      
"templateName": "resourceGroup",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {},
"parameters": {
"rgName": {
"type": "string",
"metadata": {
"description": "Name of the resourceGroup to create"
}
},

实际响应:

{
"templateName": "resourceGroup",
"template": {
"$schema": [],
"contentVersion": [],
"metadata": [],
"parameters": [
[
[
[
[]
],

我很确定这是一些解析问题,但我不知道如何解决它。如果有人知道如何解决这个问题,我们将不胜感激!

多亏了@dbc,我找到了解决方案,事实上它是newtonsoft.json和text.json的混合。我一告诉cosmos客户端使用text.json,它就开始工作了。我遵循了以下指示:https://ankitvijay.net/2021/06/20/custom-json-serializer-settings-with-cosmos-db-sdk/

相关内容

  • 没有找到相关文章

最新更新