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");
}
У меня это работает.