zoukankan      html  css  js  c++  java
  • DataContractJsonSerializer类

      DataContractJsonSerializer类同样是提供JSON序列化的类。而且貌似有几个方法还和XML有点点关系。

      注意用此类要引用System.ServiceModel.Web.dll与System.Runtime.Serialization.dll

      1、属性

      DataContractSurrogate       获取给定 IDataContractSurrogate 实例的当前活动代理项类型。代理项可以扩展序列化或反序列化过程。 
      IgnoreExtensionDataObject     获取一个值,指定在反序列化时是否忽略未知数据以及在序列化时是否忽略 IExtensibleDataObject 接口。
      KnownTypes             获取一个类型集合,这些类型可呈现在使用此 DataContractJsonSerializer 实例序列化的对象图中。 
      MaxItemsInObjectGraph        获取序列化程序通过一次读取或写入调用在对象图中序列化或反序列化的最大项数。

      2、方法

      IsStartObject     已重载。 获取一个值,该值指定序列化程序是否可以读取对象。 
      ReadObject        已重载。 反序列化 JSON(JavaScript 对象表示法)数据,并返回反序列化的对象。 
      WriteEndObject     已重载。 将结束 XML 元素写入可映射到 JavaScript 对象表示法 (JSON) 的 XML 文档。 
      WriteObject       已重载。 将对象序列化为 JavaScript 对象表示法 (JSON) 文档。 
      WriteObjectContent   已重载。 将对象内容写入可映射到 JavaScript 对象表示法 (JSON) 的 XML,而不写入包装元素。 
      WriteStartObject    已重载。 写入开始 XML 元素,以便将对象序列化为可映射到 JavaScript 对象表示法 (JSON) 的 XML。

      例子:

    复制代码
      class Program
        {
            static void Main(string[] args)
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person));
                //最常用的两个方法
                string str = "{"Id":1,"Name":"刘备","Age":"23"}";
                Person p;
                using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(str)))     //构造函数能够接受Stream参数,因此你可以用内存流,文件流等等创建
                {
                    p = serializer.ReadObject(ms) as Person;
                }
                Console.WriteLine(p.Name);      //输出刘备
    
                Person p2 = new Person(2, "关羽", 23);
                byte[] byteArr;
                using (MemoryStream ms = new MemoryStream())
                {
                    serializer.WriteObject(ms, p2);
    
                    byteArr = ms.ToArray();
                }
                Console.WriteLine(Encoding.UTF8.GetString(byteArr));    //输出 {"Age":23,"Id":1,"Name":"关羽"}
    
    
    
    
                Console.WriteLine(serializer.MaxItemsInObjectGraph);    //2147483647 获取序列化程序通过一次读取或写入调用在对象图中序列化或反序列化的最大项数。
                Console.WriteLine(serializer.DataContractSurrogate);    //输出 空白
                Console.WriteLine(serializer.IgnoreExtensionDataObject);    //False 反序列化时是否忽略未知数据以及在序列化时是否忽略 IExtensibleDataObject 接口。 
                Console.WriteLine(serializer.KnownTypes.Count);     //输出 0  一个类型集合,这些类型可呈现在使用此 DataContractJsonSerializer 实例序列化的对象图中。 
    
                 //IsStartObject 已重载。 获取一个值,该值指定序列化程序是否可以读取对象。 
                 //WriteEndObject 已重载。 将结束 XML 元素写入可映射到 JavaScript 对象表示法 (JSON) 的 XML 文档。 
                 //WriteObjectContent 已重载。 将对象内容写入可映射到 JavaScript 对象表示法 (JSON) 的 XML,而不写入包装元素。 
                 //WriteStartObject 已重载。 写入开始 XML 元素,以便将对象序列化为可映射到 JavaScript 对象表示法 (JSON) 的 XML。 
    
    
                
                Console.ReadKey();
            }
        }
    
    
        [DataContract]      //对于使用DataContractJsonSerializer类而言,该属性是必须的
        public class Person
        {
            public Person(int id,string name,int age)
            {
                Id = id;
                Age = age;
                Name = name;
            }
    
            [DataMember] //对于使用DataContractJsonSerializer类而言,该属性是必须的
            public int Id
            {
                get;
                set;
            }
            [DataMember] 
            public string Name
            {
                get;
                set;
            }
            [DataMember] 
            public int Age
            {
                get;
                set;
            }
        }
    复制代码
     
    分类: 前端:Json
  • 相关阅读:
    python 字符串替换
    python 字符串截取
    python 字符串连接
    PHP 做群发短信(短信接口连接问题)
    Yii dropDownList 下拉菜单 联动菜单
    我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
    SQL Server 2008 R2——分组取前几名
    SQL Server 分组后取Top N
    大型网站架构系列:20本技术书籍推荐
    较主流的消息队列的比较与选型
  • 原文地址:https://www.cnblogs.com/Alex80/p/4500776.html
Copyright © 2011-2022 走看看