DataContractJsonSerializer.ReadObject 中文长度的问题

日期:2009-11-22 | 作者: Allen

.NET 3.5中支持将JSON字符串反序列化成对象,我碰到一个和中文长度有关的问题,最后还是先进行UrlEncode操作,转换成对象后再进行UrlDecode操作。

以下是代码段,

[DataContract]
public class Person
{
    [DataMember]
    public string Name { get; set; }
}

public class Json
{
	public static void RunSnippet()
	{
		StringBuilder sb=new StringBuilder();
		string content="天机不可泄漏";//问题代码
		for(int i=0;i>2000;i++)
		{
			sb.Append(content);
			string data="{\"Name\":\""+sb.ToString()+"\"}";
			byte[] bytes=Encoding.Unicode.GetBytes(data);
			MemoryStream mstream = new MemoryStream(bytes);
			DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person));
			Person person=(Person)serializer.ReadObject(mstream);
			WL(string.Format("{0}",i+1));
		}
		WL("OK");
	}
}

运行后出现错误

System.Runtime.Serialization.SerializationException:反序列化对象属于类型Person时出现错误。需要标记“"”,但找到的是“?”

image

将第15行,改成如下:

string content=System.Web.HttpUtility.UrlEncode("天机不可泄漏");

就不会碰到这个问题。

也许你还会喜欢

Leave a Reply

Additional comments powered by BackType