每次我尝试反序列化包含非ASCII字符的字符串(使用.netcore3.1的JsonSerializer)时,我都无法获得正确的结果。例如,当这是字符串
时private String readMessage()
{
Uri mSmsinboxQueryUri = Uri.parse("content://sms/inbox");
String[] projection = {"address", "body"};
String phoneNumber = getPhoneNo();
String result = null;
String[] data = null;
try {
Cursor cursor1 = getContentResolver().query(mSmsinboxQueryUri,
projection,
"address = ?",
new String[]{phoneNumber},
"date DESC LIMIT 1");
while (result==null)
{
if (cursor1 != null && cursor1.moveToNext())
{
result = cursor1.getString(cursor1.getColumnIndex("body"));
data = result.split("/");
if (data.length==6)
break;
else
result = null;
}
}
}
catch (Exception e){
}
return result;
}
我需要进行哪些更改才能使用JsonDeserializer进行反序列化?
我查看了{
"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"]
}
}
的{{1}}属性,但是在使用它时没有任何作用。
我正在尝试将其反序列化为以下类(LanguagesResponse)
JsonSerializationOptions
其中RpcResponse是Encoder
和 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>();
}
收到回复后,我将进行反序列化:
string id
谢谢
答案 0 :(得分:0)
请勿将MemoryStream
传递给DeserializeAsync
。 (这仅在内容为ASCII时才有效,因为这是字符串与字节数组相同的唯一编码。)
改为传递一个字符串,您可以使用它:
string s = Encoding.UTF8.GetString(ms);
也就是说,假设您的内容是UTF-8编码的。您需要找出答案。如果是其他编码,请使用该编码代替Encoding.UTF8
。
编辑:
您实际上不需要找出什么编码并对其进行硬编码(例如Encoding.UTF8
)。您可以改用此行,它将从响应中获取编码:
string s = response.ContentEncoding.GetString(ms);
但是,写得不好的API可能不会在响应中包含编码,因此您必须对其进行硬编码才能使其正常工作。