首页新闻找找看学习计划

.NET Core 3.0 中使用 System.Text.Json 序列化中文时的编码问题

0
悬赏园豆:200 [已解决问题] 解决于 2019-08-30 21:39

使用下面的代码进行 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

dudu的主页 dudu | 高人七级 | 园豆:41258
提问于:2019-05-14 21:45

Hello dudu 我们也遇到了.net core 3.0 api/signalr输出接口的编码不正确问题,这个最终是怎么修改的呢?

蜗牛往前走 3个月前

@蜗牛往前走: 目前只能改用 json.net

dudu 3个月前
< >
分享
最佳答案
1

var options = new JsonSerializerOptions ();
options.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create (UnicodeRanges.All);
var json=JsonSerializer.Serialize (new { title = "代码改变世界" }, options);
Console.WriteLine(json);

收获园豆:180
X_Stars | 菜鸟二级 |园豆:393 | 2019-08-30 15:10

赞!对于 web api 项目,在 Startup 中添加如下的配置

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers().AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
    });
}
dudu | 园豆:41258 (高人七级) | 2019-08-30 21:38

@dudu: 中文这样可以了, 但是符号(转义字符)还是不对

taadis | 园豆:308 (菜鸟二级) | 2019-09-27 11:29

@taadis: 看到你自己找到了解决方法

string bJsonString = System.Text.Json.JsonSerializer.Serialize(
    value: jsonObject,
    options: new System.Text.Json.JsonSerializerOptions
    { 
        Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
    });
dudu | 园豆:41258 (高人七级) | 2019-09-28 11:11

@dudu: 是啊 平时都是习惯使用 Newtonsoft.Json, 也习惯了其的一些默认行为, 现在对比一看门道好多...

taadis | 园豆:308 (菜鸟二级) | 2019-09-28 11:14
其他回答(3)
0

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; }

这个属性吗

收获园豆:10
BUTTERAPPLE | 园豆:2918 (老鸟四级) | 2019-05-14 22:15

[JsonIgnore] 是不对指定的属性进行序列化,我想要的效果是

{"title":"代码改变世界"}
支持(0) 反对(0) dudu | 园豆:41258 (高人七级) | 2019-05-14 22:21
0

JsonConvert.SerializeObject

收获园豆:10
二五六七 | 园豆:220 (菜鸟二级) | 2019-05-15 10:14

这是 Json.NET 中才有的

支持(0) 反对(0) dudu | 园豆:41258 (高人七级) | 2019-05-15 10:21
1

.net core 3.0 preview7 JsonSerializerOptions 都没有 Encoder属性。
需要preview8才可以

sylla | 园豆:54 (初学一级) | 2019-08-30 22:52

原来如此

支持(0) 反对(0) dudu | 园豆:41258 (高人七级) | 2019-08-31 07:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册