我正在将一个ASP.NET Core 2应用迁移到ASP.NET Core 3。我的控制器需要返回具有已经是JSON字符串的属性的对象,因此看起来像这样:
public class Thing {
public int Id { get; set; }
public string Name { get; set; }
public string Data { get; set; } // JSON Data
}
var thing = new Thing
{
Id = 1,
Name = "Thing",
Data = "{\"key\":\"value\"}"
};
Thing
应该被序列化,以便 Data
属性不是字符串,而是 JSON 对象的一部分。就像这样:
{
"id": 1,
"name": "Thing",
"data": {
"key": "value"
}
}
在.NET Core 2和
Newtonsoft.Json
中,我使用了JRaw
作为Data
类型,因此序列化程序知道该属性已经序列化为JSON并不会尝试将其表示为字符串。.NET Core 3使用不兼容
JRaw
的System.Text.Json
。是否有相应的等效物来完成同样的事情?我可以使用JsonElement
作为Data
的类型,并使用JsonDocument.Parse(jsonString).RootElement
转换字符串。这将产生所需的结果,但我想避免不必要的反序列化+序列化步骤,因为数据对象可能相对较大。
JsonDocument
后进行处理。如果你需要在文档被处理后保存JsonElement
,那么你需要将其克隆。 - dbc