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

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

ScriptIgnoreAttribute使用示例

使用ScriptIgnoreAttribute可以指定某些公共属性或公共字段不序列化:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值