Json到C#无法正确反序列化货币符号

时间:2018-11-08 00:07:09

标签: c# json serialization asp.net-core-2.0 web.api

我正在将C#web.api与.net core 2.1一起使用。我在appsetting.json文件中有一个Json属性,当通过AddOptions将其反序列化为c#时,£符号将变为

我可以在AddJsonOptions中添加一个设置以确保不更改此符号吗?

JSON “ SomeProperty”:“英镑£”,

C#属性 SomeProperty =“磅

我解决了这一问题:在记事本中打开文件,并以UTF-8编码保存。在VS中保存文件时,它保留了UTF-8编码。不确定在创建appsetting文件时Visual Studio在做什么,但过去似乎是一个问题。 github.com/aspnet/Configuration/issues/241作为记录,我在Windows 10上使用VS2017 15.8.4

应用设置

{
  "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 个答案:

答案 0 :(得分:0)

我也有这个问题。我照做了

\u00A3 

是英镑符号(£)。我使用下面的代码

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

这对我有用。

答案 1 :(得分:0)

(解决方案从问题迁移到答案):

我通过在记事本中打开文件并将其保存为 UTF-8 编码解决了这个问题。在 VS 中保存文件时,它保留了 UTF-8 编码。不确定 Visual Studio 在创建 appsetting 文件时在做什么,但过去似乎是一个问题。 https://github.com/aspnet/Configuration/issues/241 作为记录,我在 Windows 10 上使用 VS2017 15.8.4

应用设置

{
  "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);
}