首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >System.Text.Json.JsonSerializer.Serialize添加\u 0022

System.Text.Json.JsonSerializer.Serialize添加\u 0022
EN

Stack Overflow用户
提问于 2021-04-21 05:51:25
回答 5查看 6K关注 0票数 7

如何将JsonSerializer设置为不将"\u0022“添加到EventData属性的字符串中?因为我得到:

{"Id":5,"CreateDate":"2021-04-21T05:26:30.9817284Z","EventData":"{\u0022Id\u0022:1,

我永远不会反序列化EventData,它必须是可读的。我想:

{"Id":5,"CreateDate":"2021-04-21T05:26:30.9817284Z","EventData":"{Id:1,Email:test@test.test}"}

我的代码:

代码语言:javascript
运行
复制
public class EmailSent
{
    public int Id { get; set; }
    public string Email { get; set; }
}

public class UserCreated
{
    public int Id { get; set; }
    public DateTime CreateDate { get; set; }
    public string EventData { get; set; }
}

var emailSent = new EmailSent
{
    Id = 1,
    Email = "test@test.test"
};

var userCreated = new UserCreated
{
    Id = 5,
    CreateDate = DateTime.UtcNow,
    EventData = JsonSerializer.Serialize(emailSent) // I will never deserialize it
};

string result = JsonSerializer.Serialize(userCreated);
EN

回答 5

Stack Overflow用户

发布于 2021-04-21 07:51:08

例如,您可以使用UnsafeRelaxedJsonEscaping

代码语言:javascript
运行
复制
var serializeOptions = new JsonSerializerOptions
{
    WriteIndented = true,
    Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
    };

string json = JsonSerializer.Serialize(userCreated, serializeOptions);

这将产生以下输出:

代码语言:javascript
运行
复制
{
  "Id": 5,
  "CreateDate": "2021-04-21T07:49:23.4378969Z",
  "EventData": "{\"Id\":1,\"Email\":\"test@test.test\"}"
}

参考资料:如何使用System.Text.Json自定义字符编码.请阅读此处的警告:

警诫 与默认编码器相比,UnsafeRelaxedJsonEscaping编码器允许字符通过非转义:(.)

票数 12
EN

Stack Overflow用户

发布于 2022-05-02 11:54:50

之所以会发生这种情况,是因为JsonSerializer.Serialize()被多次调用。

票数 4
EN

Stack Overflow用户

发布于 2021-04-21 06:01:07

您可以指定“JSONSerializerOptions”编码器等于JavaScriptTenCoder。创建(新TextEncoderSettings(UnicodeRanges.All))如下

代码语言:javascript
运行
复制
public static string ToString(this object str)
{
    try
    {
         string sResult = JsonSerializer.Serialize(str, new JsonSerializerOptions{WriteIndented = true, Encoder = JavaScriptEncoder.Create(new TextEncoderSettings(System.Text.Unicode.UnicodeRanges.All))});
         return sResult;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67189964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档