Json to C# неправильно десериализовал символ валюты

Я использую C# web.api с ядром.net 2.1. У меня есть свойство Json в файле appsetting.json, и когда он десериализуется в C#, через AddOptions, символ £ меняется на to

Могу ли я добавить параметр в AddJsonOptions чтобы этот символ не был изменен?

JSON "SomeProperty": "фунт £",

Свойство C# SomeProperty= "фунт "

Я решил это: открыв файл в блокноте и сохранив его в кодировке UTF-8. При сохранении файла в VS он сохранил кодировку UTF-8. Не уверен, что Visual Studio делает при создании файла appsetting, но в прошлом это казалось проблемой. github.com/aspnet/Configuration/issues/241 Для записи я использую VS2017 15.8.4 на Windows 10

AppSettings

{
  "SftpConfigList": {
    "SftpConfigs": [
      {
        "Host": "somehost1",
        "Username": "foo",
        "Password": "okokokok"
      },
      {
        "Host": "somehost2",
        "Username": "bar",
        "Password": "pass£££word"
      }
    ]
  }
}


namespace WebApplication1
{
    public class SftpConfigListDto
    {
        public SftpConfigDto[] SftpConfigs { get; set; }
    }

    public class SftpConfigDto
    {
        public string Host { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }
    }
}

ЗАПУСКАТЬ

public void ConfigureServices(IServiceCollection services)
{
    services.AddOptions();
    services.Configure<SftpConfigListDto>(Configuration.GetSection("SftpConfigList"));
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

2 ответа

(Решение перешло от вопроса к ответу):

Я решил это, открыв файл в блокноте и сохранив его в кодировке UTF-8. При сохранении файла в VS он сохранил кодировку UTF-8. Не уверен, что Visual Studio делает при создании файла приложения, но, похоже, это было проблемой в прошлом. https://github.com/aspnet/Configuration/issues/241 Для записи я использую VS2017 15.8.4 в Windows 10

Настройки приложения

      {
  "SftpConfigList": {
    "SftpConfigs": [
      {
        "Host": "somehost1",
        "Username": "foo",
        "Password": "okokokok"
      },
      {
        "Host": "somehost2",
        "Username": "bar",
        "Password": "pass£££word"
      }
    ]
  }
}


namespace WebApplication1
{
    public class SftpConfigListDto
    {
        public SftpConfigDto[] SftpConfigs { get; set; }
    }

    public class SftpConfigDto
    {
        public string Host { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }
    }
}

ЗАПУСКАТЬ

      public void ConfigureServices(IServiceCollection services)
{
    services.AddOptions();
    services.Configure<SftpConfigListDto>(Configuration.GetSection("SftpConfigList"));
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

У меня тоже была такая проблема. Я сделал как следует

\u00A3 

- это знак фунта (£). Я использовал это, используя приведенный ниже код

if (yourJsonString.Contains("£"))
{
     yourJsonString = yourJsonString.Replace("£", "\\u00A3");
}

У меня это работает.

Другие вопросы по тегам