我想将.NET对象序列化为JSON,其中包含外语字符串,如中文或俄文.当我在生成的JSON中执行此操作(使用下面的代码)时,它会将那些以字符串形式存储的字符编码为"?" 而不是必需的unicode char.
using Newtonsoft.Json;
var serialized = JsonConvert.SerializeObject(myObj, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All, Formatting = Newtonsoft.Json.Formatting.Indented });
Run Code Online (Sandbox Code Playgroud)
有没有办法使用外语的JSON.Net序列化器?
例如
אספירין(希伯来语)
एस्पिरि(印地文)
阿司匹林(中文)
アセチルサリチル酸(日语)
非常感谢!
Bri*_*ers 10
导致此问题的不是序列化程序; Json.Net处理外国字符就好了.您更有可能正在执行以下操作之一:
Encoding.UTF8.varchar数据库中的列而不是nvarchar. varchar不支持unicode字符.要证明序列化程序不是问题,请尝试编译并运行以下示例程序.它将使用相同的JSON创建两个不同的输出文件,一个使用UTF-8编码,另一个使用默认编码.使用记事本打开每个文件."默认"文件将外来字符作为?字符.在UTF-8编码文件中,您应该看到所有字符都完好无损.(如果仍然没有看到它们,请尝试将记事本字体更改为"Arial Unicode MS".)
您还可以使用Visual Studio调试器在JSON中看到外来字符是正确的; 只需在序列化JSON的行之后放置一个断点并检查json变量.
using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
class Program
{
static void Main(string[] args)
{
List<Foo> foos = new List<Foo>
{
new Foo { Language = "Hebrew", Sample = "???????" },
new Foo { Language = "Hindi", Sample = "???????" },
new Foo { Language = "Chinese", Sample = "????" },
new Foo { Language = "Japanese", Sample = "?????????" },
};
var json = JsonConvert.SerializeObject(foos, Formatting.Indented);
File.WriteAllText("utf8.json", json, Encoding.UTF8);
File.WriteAllText("default.json", json, Encoding.Default);
}
}
class Foo
{
public string Language { get; set; }
public string Sample { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11748 次 |
| 最近记录: |