使用下面的代码进行 json 序列化
class Program
{
static void Main(string[] args)
{
var json = JsonSerializer.ToString(new { title = "代码改变世界" } );
Console.WriteLine(json);
}
}
输出的中文被编码了
{"title":"\u4ee3\u7801\u6539\u53d8\u4e16\u754c"}
请问如何让中文不被编码?
github 上的相关 issue :Utf8JsonWriter.WriteString do not honor escape=false
var options = new JsonSerializerOptions ();
options.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create (UnicodeRanges.All);
var json=JsonSerializer.Serialize (new { title = "代码改变世界" }, options);
Console.WriteLine(json);
赞!对于 web api 项目,在 Startup 中添加如下的配置
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
});
}
@dudu: 中文这样可以了, 但是符号(转义字符)还是不对
@taadis: 看到你自己找到了解决方法:
string bJsonString = System.Text.Json.JsonSerializer.Serialize(
value: jsonObject,
options: new System.Text.Json.JsonSerializerOptions
{
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
});
@dudu: 是啊 平时都是习惯使用 Newtonsoft.Json, 也习惯了其的一些默认行为, 现在对比一看门道好多...
https://github.com/dotnet/corefx/blob/master/src/System.Text.Json/docs/SerializerProgrammingModel.md
The JsonIgnore attribute specifies that the property is not serialized or deserialized.
[JsonIgnore] public DateTime? BirthDay { get; set; }
这个属性吗
[JsonIgnore]
是不对指定的属性进行序列化,我想要的效果是
{"title":"代码改变世界"}
.net core 3.0 preview7 JsonSerializerOptions 都没有 Encoder属性。
需要preview8才可以
原来如此
能写进startup.cs做全局设定吗?如果输出到页面
services.AddMvc().AddJsonOptions(options =>
{
options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
});
这样写是可以的,但如果是插入数据库,那就不起作用了,直接把中文编码进数据库了,求解。
我真的疯了,楼主找到解决办法了吗,我就想让这个东西变成正常中文,搜遍C#找不到怎么搞
解决方法在最佳答案中。
@dudu: 您好,webapi在System.Text.Json.JsonSerializer.Serialize(obj,options)中设置Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);是可以的,但是Startup中全局配置没有生效
services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
});
请教下是什么问题呢?
@最美的不是下雨天: 我们在项目中这样设置是有效的
@dudu: 好吧,谢谢您,今天来把电脑重启下竟然可以了,也是稀奇
System.Text.Json问题东西问题太多了
Hello dudu 我们也遇到了.net core 3.0 api/signalr输出接口的编码不正确问题,这个最终是怎么修改的呢?
– 蜗牛往前走 5年前@蜗牛往前走: 目前只能改用 json.net
– dudu 5年前