Из-за чего атрибут JsonPropertyName не работает с шаблоном параметров?

Ссылка скопирована
1 ответ

У меня в 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

  • d-stream, Вообще я могу просто поля назвать Project_Id и т.д, и все будет работать, просто по рекомендациям поля не должны иметь нижнее подчеркивание. Получается из самого очевидного это поля именовать точно так же как в json или в json убрать нижнее подчеркивание.
  • надо использовать [ConfigurationKeyName("type")]

    https://github.com/dotnet/runtime/issues/36010

    https://learn.microsoft.com/en-us/dotnet/api/micro...

    • Спасибо за помощь

    Ответы:

    project_id без запятой.. мб в этом дело?

    • Это просто шаблон с названиями полей, и проект бы не скопилировался, если бы в appsetting была опечатка
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Сергей Миронов Ответ

    Проблема с неработающим атрибутом 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; }
    }

    class MyClass { [JsonPropertyName("myProperty")] public T MyProperty { get; set; } } class MyNonGenericClass { [JsonPropertyName("myProperty")] public string MyProperty { get; set; } }

    Таким образом, убедившись, что атрибут JsonPropertyName применен к правильному месту в вашем коде, вы должны быть в состоянии исправить проблему с его неработающим использованием в шаблоне параметров.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно