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时出现错误。需要标记“"”,但找到的是“?”
将第15行,改成如下:
string content=System.Web.HttpUtility.UrlEncode("天机不可泄漏");
就不会碰到这个问题。