windows8开发笔记(5)-说说Json的序列化和反序列化

     Json序列化和反序列化其实是老掉牙的话题了,不过很多初学Windows8开发的朋友有的可能还不知道,我就在这里简单的提一下。

     我曾经写过Windows Phone开发经验谈(5)-Json的序列化和反序列化其实这个控件同样适用于Windows8 ,但是今天主要说的是利用微软自带的DataContractJsonSerializer类进行序列化和反序列化。

复制代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BaiduTieba.Utility;
using System.Runtime.Serialization.Json;
using BaiduTieba.Extension;

namespace BaiduTieba.Utility
{
    public class JsonHelper<T>
    {
        public static T Convert(Stream stream)
        {
            try
            {
                return (T)(Deserialize(stream, typeof(T)));

            }
            catch (Exception exc)
            {
                throw exc;
            }
        }

        public static object Deserialize(Stream streamObject, Type serializedObjectType)
        {
            if ((serializedObjectType == null) || (streamObject == null))
            {
                return null;
            }
            System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(serializedObjectType);

            return serializer.ReadObject(streamObject);
        }

        public static object Deserialize(string json, Type serializedObjectType)
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(serializedObjectType);
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
            {
                return serializer.ReadObject(ms);
            }

        }

        public static string Serialize(object objForSerialization)
        {
            string str = string.Empty;
            if (objForSerialization == null)
            {
                return str;
            }
            System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(objForSerialization.GetType());
            using (MemoryStream stream = new MemoryStream())
            {
                serializer.WriteObject(stream, objForSerialization);
                byte[] buffer = new byte[stream.Length];
                stream.Position = 0L;
                stream.Read(buffer, 0, buffer.Length);
                return buffer.ToStringByUTF8Format();
            }
        }

        public static void Serialize(Stream streamObject, object objForSerialization)
        {
            if ((objForSerialization != null) && (streamObject != null))
            {
                new System.Runtime.Serialization.Json.DataContractJsonSerializer(objForSerialization.GetType()).WriteObject(streamObject, objForSerialization);
            }
        }
    }
}
复制代码

   上面是我写好的一个帮助类JsonHelper封装了DataContractJsonSerializer。使用起来非常的简单。

JsonHelper<HotPicModel>.Convert(stream);

   如上代码,就可以把Json转换成HotPicModel这个实体类了。

   大家可以自己试试写写序列化的方法,这篇说的比较简单,欢迎大家留意讨论.

  

posted on   豆浆咖啡  阅读(1067)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
< 2013年1月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

统计

点击右上角即可分享
微信分享提示