最近在使用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;
加上這個標簽后,反序列化的時候會使用指定的編碼格式來處理中文字符,就不會出現亂碼了。
下一篇vue 股票實時曲線