json for .net(一)

JSON建构于两种结构:

“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

JSON具有以下这些形式:

对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。 (具体参见http://www.json.org/json-zh.html

json格式的数据示例:

"{\"Name\":\"Apple\",\"Expiry\":\"2010-12-18T00:00:00\",\"Price\":3.99,\"Sizes\":[\"Small\",\"Medium\",\"Large\"]}"

 

 

利用.Net 3.5自带的JavaScriptSerializer进行JSON序列化与反序列化

为了使用.Net 3.5自带的JavaScriptSerializer,需要添加引用System.ServiceModel.Web和System.Runtime.Serialization

using System.Web.Script.Serialization;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;

1.引入System.Web.Script.Serialization命名空间使用JavaScriptSerializer类实现简单的序列化

//定义一个需要序列化的类:
public class Employee
    {
        [ScriptIgnore]
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }//注:ScriptIgnore特性用来标记不需要被序列化的属性
测试:
 Employee emp = new Employee()
            {
                Id = 1,
                Name = "ZhangSan",
                Age = 20
            };
 JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
            //Serializer
            string serializerEmp = jsonSerializer.Serialize(emp);
            Response.Write(serializerEmp + "<br/>");//输出:{"Name":"ZhangSan","Age":20}
            //DeSerializer
            Employee p = jsonSerializer.Deserialize<Employee>(serializerEmp);
            Response.Write("id:"+p.Id.ToString() + ",Name:" + p.Name +",Age:"+ p.Age + "<br/>");//输出 id:0,Name:ZhangSan,Age:20


 

2.引入 System.Runtime.Serialization.Json命名空间,使用DataContractJsonSerializer类实现序列化

    [DataContract]
    public class People
    {
        [DataMember(Name = "id")]
        public int Id { get; set; }
        [IgnoreDataMember]
        public string Name { get; set; }
    }//注:可以使用IgnoreDataMember指定成员不被序列化,DataMember定义序列化属性参数。如果使用DataMember标记属性字段必须使用DataContract标记类,否则DataMember标记将不起作用
测试:
 People people = new People() { Id = 2, Name = "LiSi" };
            DataContractJsonSerializer json = new DataContractJsonSerializer(people.GetType());
            string serializedPeople = "";
            //Serializer序列化
            using (MemoryStream ms = new MemoryStream())
            {
                json.WriteObject(ms, people);
                serializedPeople = Encoding.UTF8.GetString(ms.ToArray());
                Response.Write(serializedPeople + "<br/>");//输出:{"id":2}
            }
           //DeSerializer反序列化
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(serializedPeople)))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(People));
                People myPepole = serializer.ReadObject(ms) as People;
                Response.Write("Id:"+myPepole.Id.ToString() + ",Name:" + myPepole.Name + "<br/>");//输出:  Id:2,Name:
            }


 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值