在字符串属性中使用换行符序列化对象会被意外转义

问题描述 投票:0回答:1

问题描述:

我有一个 SQL 表说明:

身份证 描述
1 你好 世界

我使用 Linq 检索表:

var result = _dbContext.Descriptions.Single(x => x.Id == 1);

查看

Text Visualizer
result.Description 的值,我们发现它具有预期值“Hello 世界”。

现在我使用 Newtonsoft 序列化对象,而不指定序列化设置:

var serialized = JsonConvert.SerializeObject(result);

查看

Text Visualizer
serialized 的值,我们看到现在有以下 JSON 字符串:

{ "Id": 1, Description: "Hello \\n world" }

我们可以看到它已经转义了换行符( ) 通过添加额外的反斜杠。我需要序列化的 JSON 来不添加这个额外的反斜杠转义字符,如下所示:

{ "Id": 1, Description: "Hello \n world" }

想法与实验

  1. 使用一些在线 JSON 验证器时,转义和未转义的 JSON 字符串似乎都是有效的。
  2. 使用以下代码会产生所需的序列化输出,但它是硬编码的并且不是从数据库中获取的:
var result = new
{
    Id = 1,
    Description = "Hello \n world"
};

var serialized = JsonConvert.SerializeObject(result);
  1. 当使用上面的硬编码示例但我们不使用常规字符串而是使用逐字文字时,我们会得到相同的不期望的结果:
var result = new
{
    Id = 1,
    Description = @"Hello \n world"
};

var serialized = JsonConvert.SerializeObject(result);
  1. 查看我们可以使用的 JsonSerializerOptions,我发现有一个选项指定
    StringEscapeHandling
    。但似乎所有可能的值都包括控制字符的转义(例如换行符)。

综述

如何防止转义换行符?我宁愿不诉诸子字符串替换策略。

c# json entity-framework json.net
1个回答
0
投票

这很可能是由于您在文本可视化工具调试器中查看字符串所致,请尝试将此值输出到文本文件。实际上可能没有多余的反斜杠

问题之前已在这里得到解答

© www.soinside.com 2019 - 2024. All rights reserved.