欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c# 接收json 中文亂碼

吉茹定1年前9瀏覽0評論

最近在使用c#開發中遇到了一個問題,就是接收到的json中文出現了亂碼,以下是解決的方法。

string jsonStr = "{ \"name\": \"張三\", \"age\": 18 }";
byte[] byteArray = Encoding.UTF8.GetBytes(jsonStr);
MemoryStream stream = new MemoryStream(byteArray);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person));
Person person = serializer.ReadObject(stream) as Person;

以上代碼使用了c#自帶的DataContractJsonSerializer來反序列化json字符串,但是因為該方法序列化時默認使用的編碼為ASCII編碼,而中文無法用ASCII編碼表示,導致反序列化的時候中文出現了亂碼。

解決的方法是在類的屬性上加上[DataMember]標簽,并指定傳遞的編碼格式。

[DataContract]
public class Person
{
private string mName;
[DataMember(Name = "name")]
public string Name
{
get { return mName; }
set { mName = HttpUtility.UrlDecode(value, Encoding.UTF8); }
}
[DataMember(Name = "age")]
public int Age { get; set; }
}
string jsonStr = "{ \"name\": \"%E5%BC%A0%E4%B8%89\", \"age\": 18 }";
byte[] byteArray = Encoding.UTF8.GetBytes(jsonStr);
MemoryStream stream = new MemoryStream(byteArray);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person));
Person person = serializer.ReadObject(stream) as Person;

加上這個標簽后,反序列化的時候會使用指定的編碼格式來處理中文字符,就不會出現亂碼了。