.NET 3.5 JSON序列化/反序列化类JavascriptSerializer简单示例

//引用System.Web.Extensions
using System;
using System.Web.Script.Serialization;

namespace ConsoleApplication1
{
    class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime Created { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            JavascriptSerializer serializer = new JavascriptSerializer();
            User user = new User();
            user.Id = 1;
            user.Name = "dnawo";
            user.Created = DateTime.Now;

            //序列化
            Console.WriteLine("序列化:");
            string json = serializer.Serialize(user);
            Console.WriteLine(json);
            //反序列化
            Console.WriteLine("反序列化:");
            User user1 = serializer.Deserialize<User>(json);
            Console.WriteLine(user1.Name);

            Console.ReadKey();
        }
    }
}

运行结果:

引用内容 引用内容
序列化:
{"Id":1,"Name":"dnawo","Created":"\/Date(1346119447875)\/"}
反序列化:
dnawo

使用ScriptIgnore指定某些类成员不序列化

class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    [ScriptIgnore]
    public DateTime Created { get; set; }
}

运行结果:

引用内容 引用内容
{"Id":1,"Name":"dnawo"}

常见问题

问:为什么DateTime类型序列化的结果为"\/Date(1346119447875)\/"?
答:使用Reflector跟踪JavascriptSerializer.Serialize方法,DateTime类型序列化代码如下:
private static void SerializeDateTime(DateTime datetime, StringBuilder sb, SerializationFormat serializationFormat)
{
    if (serializationFormat == SerializationFormat.JSON)
    {
        sb.Append("\"\\/Date(");
        sb.Append((long) ((datetime.ToUniversalTime().Ticks - DatetimeMinTimeTicks) / 0x2710L));
        sb.Append(")\\/\"");
    }
    else
    {
        sb.Append("new Date(");
        sb.Append((long) ((datetime.ToUniversalTime().Ticks - DatetimeMinTimeTicks) / 0x2710L));
        sb.Append(")");
    }
}


评论: 0 | 引用: 0 | 查看次数: 5143
发表评论
登录后再发表评论!