Из-за чего атрибут JsonPropertyName не работает с шаблоном параметров?
У меня в appsetting записаны GoogleCredential в таком виде:
"type": "", "project_id": "" "private_key_id": "", "private_key": "", "client_email": "", "client_id": "", "auth_uri": "" "token_uri": "", "auth_provider_x509_cert_url": "", "client_x509_cert_url": "", "universe_domain": "" |
"type": "", "project_id": "" "private_key_id": "", "private_key": "", "client_email": "", "client_id": "", "auth_uri": "" "token_uri": "", "auth_provider_x509_cert_url": "", "client_x509_cert_url": "", "universe_domain": ""
Я создал класс для шаблона параметров:
public class GoogleConfig { public const string SectionName = "GoogleBucket"; public GoogleCredentialProperty GoogleCredential { get; set; } = new(); public string GoogleCloudStorageBucket { get; set; } = string.Empty; } [JsonObject] public class GoogleCredentialProperty { [JsonPropertyName("type")]public string Type { get; set; } = string.Empty; [JsonPropertyName("project_id")] public string ProjectId { get; set; } = string.Empty; } |
public class GoogleConfig { public const string SectionName = "GoogleBucket"; public GoogleCredentialProperty GoogleCredential { get; set; } = new(); public string GoogleCloudStorageBucket { get; set; } = string.Empty; } [JsonObject] public class GoogleCredentialProperty { [JsonPropertyName("type")]public string Type { get; set; } = string.Empty; [JsonPropertyName("project_id")] public string ProjectId { get; set; } = string.Empty; }
Добавил сервис:
builder.Services.Configure<GoogleConfig>(builder.Configuration.GetSection(GoogleConfig.SectionName)); |
builder.Services.Configure<GoogleConfig>(builder.Configuration.GetSection(GoogleConfig.SectionName));
Когда через дебаг прошел, оказалось что в объекте GoogleСonfig значение есть только у поля Type
Дополнительно:
ну я бы на всякий случай проверил наличие русских букв "о", "е", "с" в имени проперти и json
надо использовать [ConfigurationKeyName("type")]
https://github.com/dotnet/runtime/issues/36010
https://learn.microsoft.com/en-us/dotnet/api/micro...
- Спасибо за помощь
Ответы:
project_id без запятой.. мб в этом дело?
- Это просто шаблон с названиями полей, и проект бы не скопилировался, если бы в appsetting была опечатка
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Проблема с неработающим атрибутом JsonPropertyName в шаблоне параметров может возникнуть из-за нескольких возможных причин. Одной из них может быть неправильное использование атрибута JsonPropertyName в сочетании с шаблоном параметров.
Возможно, что вы пытаетесь использовать атрибут JsonPropertyName для указания имени свойства в шаблоне параметров, но это не является корректным использованием атрибута. Атрибут JsonPropertyName должен быть применен к свойству класса, чтобы указать имя, которое будет использоваться при сериализации объекта в JSON.
Для решения этой проблемы, убедитесь, что вы применяете атрибут JsonPropertyName к свойству класса, а не к шаблону параметров. Например, если у вас есть класс с шаблоном параметров, вы можете создать отдельный класс с нешаблонными свойствами и применить атрибут JsonPropertyName к этим свойствам.
Пример:
class MyClass { [JsonPropertyName("myProperty")] public T MyProperty { get; set; } } class MyNonGenericClass { [JsonPropertyName("myProperty")] public string MyProperty { get; set; } }
Таким образом, убедившись, что атрибут JsonPropertyName применен к правильному месту в вашем коде, вы должны быть в состоянии исправить проблему с его неработающим использованием в шаблоне параметров.