【发布时间】:2020-11-09 19:17:49
【问题描述】:
每次我尝试反序列化包含非 ASCII 字符的字符串(使用 .netcore3.1 的 JsonSerializer)时,我都没有得到正确的结果。例如,当这是字符串时
{
"id": "0",
"jsonrpc": "2.0",
"result": {
"languages": ["German","English","Spanish","French","Italian","Dutch","Portuguese","Russian","Japanese","Chinese (simplified)","Esperanto","Lojban"],
"languages_local": ["Deutsch","English","Español","Français","Italiano","Nederlands","Português","русский язык","日本語","简体中文 (中国)","Esperanto","Lojban"]
}
}
我需要进行哪些更改才能使用 JsonDeserializer 对其进行反序列化?
我查看了JsonSerializationOptions 的Encoder 属性,但我使用它时没有任何效果。
我正在尝试将其反序列化为以下类 (LanguagesResponse)
public class LanguagesResponse : RpcResponse
{
public LanguagesResult result { get; set; }
}
public class LanguagesResult
{
public List<string> languages = new List<string>();
public List<string> languages_local = new List<string>();
}
其中 RpcResponse 是 string id 和 string jsonrpc
当我收到响应时,我正在反序列化:
var responseBody = await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false);
using Stream ms = new MemoryStream(responseBody);
var serializationOptions = new JsonSerializerOptions()
{
IgnoreNullValues = true,
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
};
LanguagesResponse responseObject = await JsonSerializer.DeserializeAsync<LanguagesResponse>(ms, serializationOptions, token).ConfigureAwait(false);
谢谢
【问题讨论】:
-
试试
ReadAsStringAsync,它应该使用响应中包含的编码(如果包含)。 -
@ckuri 如果没有指定编码怎么办?
-
它会回退到UTF-8,这也是JsonSerializer的默认编码。
标签: c# json serialization