C# 序列化与反序列化几种格式的转换

2023-11-15

这里介绍了几种方式之间的序列化与反序列化之间的转换

首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象;

第一种将object转换为string对象,这种比较简单没有什么可谈的;

 public string ScriptSerialize<T>(T t)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Serialize(t);
        }


第二种将object转换为xml对象:

 public string ScriptSerializeToXML<T>(T t)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            MemoryStream mem = new MemoryStream();
            XmlTextWriter writer = new XmlTextWriter(mem,Encoding.UTF8);
            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
            ns.Add("","");
            serializer.Serialize(writer,t,ns);
            writer.Close();
            return Encoding.UTF8.GetString(mem.ToArray());
        }

下面我主要讲string对象反序列化为对应的对象;

一、将string对象反序列化为object对象

 public T ScriptDeserialize<T>(string strJson)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Deserialize<T>(strJson);
        }

二、将string对象反序列化为list对象

 public List<T> JSONStringToList<T>(string strJson)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            List<T> objList = serializer.Deserialize<List<T>>(strJson);
            return objList;
        }

三、将string对象反序列化为datatable对象

  public DataTable JSONStringToDataTable<T>(string strJson)
        {
            DataTable dt = new DataTable();
            if (strJson.IndexOf("[") > -1)//如果大于则strJson存放了多个model对象
            {
                strJson = strJson.Remove(strJson.Length - 1, 1).Remove(0, 1).Replace("},{", "};{");
            }
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            string[] items = strJson.Split(';');

            foreach (PropertyInfo property in typeof(T).GetProperties())//通过反射获得T类型的所有属性
            {
                DataColumn col = new DataColumn(property.Name,property.PropertyType);
                dt.Columns.Add(col);
            }
            //循环 一个一个的反序列化
            for (int i = 0; i < items.Length; i++)
            {
                DataRow dr = dt.NewRow();
                //反序列化为一个T类型对象
                T temp = serializer.Deserialize<T>(items[i]);
                foreach (PropertyInfo property in typeof(T).GetProperties())
                {
                    dr[property.Name] = property.GetValue(temp,null);
                }
                dt.Rows.Add(dr);
            }
            return dt;
        }

四、将xml对象反序列化为object对象

 public T JSONXMLToObject<T>(string strJson)
        {
            XmlDocument xdoc = new XmlDocument();
            try
            {
                xdoc.LoadXml(strJson);
                XmlNodeReader reader = new XmlNodeReader(xdoc.DocumentElement);
                XmlSerializer ser = new XmlSerializer(typeof(T));
                object obj = ser.Deserialize(reader);
                return (T)obj;
            }
            catch
            {
                return default(T);
            }
        }

现在用具体的实例来如何调用他们呢?特别要注意的是将xml对象反序列化objcet对象

 public class LoginObject
    {
          public string Account { get; set;}
          public string Password { get; set;}
     }

 

 1  LoginObject loginObject = new LoginObject { Account = account, Password = password };
 2             ExTools.Manage.Class.CScriptSerialize Serialize = new Class.CScriptSerialize();
 3             //将object对象转换为string
 4              string strJson=Serialize.ScriptSerialize(loginObject);
 5           
 6             //将object对象转换为xml对象
 7             string strJson = Serialize.ScriptSerializeToXML(loginObject);
 8            
 9 
10             //转换为list对象
11              List<LoginObject> list = Serialize.JSONStringToList<LoginObject>(strJson);
12             //将一个xml对象转换为object对象
13            strJson = strJson.Substring(1, strJson.Length - 1);
14             loginObject = Serialize.JSONXMLToObject<LoginObject>(strJson);
15             //将字符串转换为dataTable
16             DataTable dt = Serialize.JSONStringToDataTable<LoginObject>(strJson);
17             //将字符串转换为object对象
18             loginObject = Serialize.ScriptDeserialize<LoginObject>(strJson);













转载自http://www.cnblogs.com/xiaolifeidao/archive/2013/01/28/2879523.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 序列化与反序列化几种格式的转换 的相关文章

  • “字符串”是什么意思?信息'

    我刚刚在查看定义时发现了这个PlatformNotSupportedException class 什么是string message意思是 据我所知是 是缩写Nullable lt gt but Nullable lt gt 只能应用于结
  • c# - 显示小数点到小数点后 6 位 [重复]

    这个问题在这里已经有答案了 可能的重复 具有 N 个小数位的 Double ToString https stackoverflow com questions 3059759 double tostring with n number o
  • 如何将不记名令牌发送到 ASP NET MVC 5 中的视图?

    我有一个 NET MVC and WEB API项目 我想打电话给WEB API controllers来自 javascript 但我没有找到将令牌发送到我的视图的方法 我想添加bearer token in Viewbag变量 使用以下
  • 按日期对 JSON 进行排序

    我知道这一定相对简单 但我有一个 JSON 数据集 我想按日期排序 到目前为止 我每次都会遇到问题 现在我将日期存储为this lastUpdated 如果有帮助的话 我可以访问 jquery 但我意识到 sort 是本机 JS 提前致谢
  • 在 C# 中轻松创建支持索引的属性

    在 C 中我发现索引属性 http msdn microsoft com en us library aa288464 VS 71 aspx非常有用 例如 var myObj new MyClass myObj 42 hello Conso
  • C++ 和序列化:有什么方法可以进行某种内省吗?

    我读过一些例子维基百科 http en wikipedia org wiki Type introspection C 2B 2B但我正在寻找一些现实生活中的例子 如何使用内省 为什么 它有助于编写干净的代码 以及代码本身 例如 有没有办法
  • C# 并行与并行线程代码性能

    我一直在测试 System Threading Parallel 与线程的性能 我很惊讶地发现并行比线程花费更长的时间来完成任务 我确信这是由于我对并行的了解有限 我刚刚开始阅读 我想我会分享一些片段 如果有人可以向我指出并行代码比线程代码
  • 将 void *user_data 转换为对象

    我该如何投射void something到标准 C 中的对象 具体来说我想投void userdata to std map
  • 比较 LINQ to SQL 中的两个日期

    我有一个数据库 其中有一个名为会议的表 会议日期使用以下格式存储在此表中 May 2nd 2011 例如 格式为5 2 2011 我的要求是获取两个日期 例如 2011 年 4 月 25 日和 2011 年 5 月 2 日 之间的会议 并编
  • NHibernate IQueryable 集合作为 root 的属性

    我有一个根对象 它有一个集合属性 例如 I have a Shelf object that has Books Now public class Shelf public ICollection
  • & 运算符的含义是什么?

    在下面的代码中 Expression
  • 为什么将 char 传递给函数会改变它在 c 中的值?

    我目前正在关注本作业簿 http www cs bham ac uk exr lectures opsys 10 11 lectures os dev pdf关于构建操作系统 我的目的是写一个64位内核 我已经在文本模式下加载 内核 代码并
  • ActiveSupport::JSON 解码哈希丢失符号

    我正在尝试序列化和反序列化哈希 当散列被解除序列化时 密钥被解除符号化 例如不是更多 一 而是 一 从 Rails 控制台 gt gt h one gt 1 two gt two one gt 1 two gt two gt gt j Ac
  • 执行存储过程时 ExecuteNonQuery() 返回 -1

    我正在尝试在 Visual Studio 中执行存储过程 下面给出 CREATE PROCEDURE dbo addStudent stuName varchar 50 address varchar 100 tel varchar 15
  • 为什么 httpRuntime targetFramework="4.5" 禁止抓取 .ASPXAUTH cookie?

    当我的 web config 具有以下 httpRuntime 时 我的控制器无法获取 cookie ASPXAUTH 它似乎能够获取任何其他 cookie 无论带或不带句点前缀 如果我删除下面的行 它就可以正常工作
  • C 中的链表数组:初始化和插入?

    我需要创建一个链表数组 如图所示 这就是我到目前为止所做的 typedef struct Node int data struct Node next Node int main void Node link 5 for int q 0 q
  • 类型别名和不完整类型

    我可能已经超出了解决这个本应简单的问题的范围 我在这里开始这个问题 在编译时获取基类的类型 https stackoverflow com questions 17735852 getting type of a base class at
  • 如何使用 *non-case* 类通过 Scala 从 JSON 反序列化?

    我正在编写一个 Scala 应用程序 需要序列化和反序列化 JSON 某些 JSON 对象具有超过 22 个字段 因此我无法使用案例类 并且也无法更改格式 我找到的所有 Scala JSON 库都只能 轻松地 与案例类一起使用 而不是与普通
  • 使用非字符串作为字符串(而不是自动使用 ToString)时如何显示错误?

    建议的重复确实是一个类似的问题 然而 答案只涵盖一种选择 禁用 ToString 本身 还有其他可能的解决方案 例如让 Visual Studio 警告我 或者不调用 ToString 仔细阅读那里的答案 他认为is调用 只是解释说没有办法
  • char[length]初始化并处理

    我定义了一个字符数组 char d 6 如果我在以下方面有误 请纠正我 此时没有为变量分配内存d 现在我要初始化它 d aaaaa 这种初始化之后 就不需要释放内存了 它将自动完成 我怎么知道是否char 被初始化了吗 我正在寻找类似的模式

随机推荐

  • Several Machine Learning Problems

    Classification Classification algorithms are algorithms that learn topredict theclass orcategory of an instance of data
  • 不是具体的python序列类型的是_python的序列类型不包括

    Python中除了字符串以外 还有哪些常用的序列类型呢 题主欢迎来到CSS布局HTML 序列类型除了题主提到的 字符串 外 常用的还有 列表 list 元组 tuple range 对象 参考 题主有时间可以看一下Python官网Built
  • CTF-WEB(攻防世界题目-新手区)

    CTF WEB 新手区 view source robots backup Cookie disabled button weak auth simple php get post xff referer webshell waf simp
  • 技术服务线上沙龙——WebGL三维空间分析线上问题整理

    12月20日 超图集团质控与支持中心组织了岁末冲刺技术服务福利第三弹 WebGL三维空间分析 在讲解过程中就不断有朋友们在留言区提问 后面有朋友们提出将问题整理为文档 方便大家后续查看 于是 技术支持的同事们打铁趁热 将线上关注度较高的问题
  • 视频图像去雨论文数据集主页整理总结

    概述 近年来 计算机视觉快速发展 在各领域取得了较大的进展 尤其是随着深度学习的提出 计算机视觉再封闭和受限环境下都有着不错的表现 但是 面对开放和恶劣环境下 依然存在这巨大的挑战 常见的就是恶劣天气 对于户外的视觉系统 包括自动驾驶 视频
  • python编辑器IDLE的使用说明

    1 idle快捷键说明 alt n 返回之前输入过的上一个命令 alt p 下一个命令 ctl n 创建新的py文件 运行是F5 参考博客 https blog csdn net Dreamy LIN article details 794
  • TCP协议通信的过程

    终端之间的通信 一定是会话与会话 应用与应用之间的通信 端到端的连接是如何实现的 通过端口 三次握手 实现 TCP的建立 三次握手 通信之前先要建立三次握手 建立成功才能够通信 三次握手就是TCP连接建立的过程 TCP中有六个bite位 指
  • AI操作视频的工具最新最强集合

    AI的进化日新月异 很多之前只是在想象中的操作 已经有很多可以使用AI来完成了 最新的Stable Diffusion ControlNet EBsynth有哪些神奇的应用 如何一键替换视频中人物和场景 如何根据文字描述即可生成梦幻视频 我
  • git21天打卡day21-解决合并冲突

    新建的分支是有master分支的所有内容的 出现问题 本地新建了分支并修改了内容 推送到了远程 倒是远程分支和master都是旧的内容 猜想可能是本地修改没有add commit 本地修改要提交到远程必须add commit 和push 远
  • 在字节实习8个月后,成功转正!

    大家好 这里是 NewBeeNLP 今天给大家分享一位22届学弟在字节实习8个月后成功转正的经历 他向我们展示了在字节实习的日常工作 以及转正答辩该如何准备 最后告诫学弟学妹们今年秋招会很激烈 一定要尽早投递 本文堪称大厂实习转正的教科书
  • SQLITE3 使用总结

    SQLITE3 使用总结 3 5 转 3 不使用回调查询数据库 T6 F H m2 上面介绍的 sqlite3 exec 是使用回调来执行 select 操作 还有一个方法可以直接查询而不需要回调 但是 我个人感觉还是回调好 因为代码可以更
  • 安卓手机玩游戏卡顿怎么解决_员工在上班时间玩手机怎么办?解决方案来了!...

    人性化管理不是嘴上说说而已 员工为什么上班期间看手机 你思考过吗 gt gt gt gt 第一种员工自然是工作效率很高 这种员工也是很多公司想要拥有的 如果a员工在工作期间忙的鸡飞狗跳 b员工则胜似 闲庭漫步 这足以说明两者之间的工作效率
  • 基于深度学习识别模型的缺陷检测

    一 介绍 缺陷检测被广泛使用于布匹瑕疵检测 工件表面质量检测 航空航天领域等 传统的算法对规则缺陷以及场景比较简单的场合 能够很好工作 但是对特征不明显的 形状多样 场景比较混乱的场合 则不再适用 近年来 基于深度学习的识别算法越来越成熟
  • 西班牙放大招,利用区块链技术防腐

    链客 专为开发者而生 有问必答 此文章来自区块链技术社区 未经允许拒绝转载 在过去十年来 西班牙爆发了一系列引人注目的腐败丑闻 其中以公共采购最甚 但据TI 2017年的腐败认知指数表明 西班牙下滑了8个百分点 成为欧盟排名最低的国家之一
  • windows下解决matplotib中文乱码问题

    matplotlib默认是不支持中文的 在window系统下如何设置使其可以显示中文 参考文章
  • 科目一:信息系统综合知识——4.嵌入式技术

    4 嵌入式技术 4 1 嵌入式微处理器体系结构 冯诺依曼结构 传统计算机采用 也称普林斯顿结构 该结构下的存储器将程序指令存储器和数据存储器合并在一起 计算机程序和数据共用一个存储空间 程序指令存储地址和数据存储地址指向同一存储器的不同物理
  • treectrl遍历

    树是一种十分重要的数据结构 在程序设计中 我们经常用树来组织数据 对于树的遍历也是一种常规的运算 下面提供了两个算法 前面一个只是简单的遍历了所有的结点 后面一个则可以根据传入条件返回相应的结点 功能 遍历CTreeCtrl所有结点 参数
  • expected type: java.lang.String, actual value: $Proxy26

    这个错误是在什么情况下报出的 sqlsever ssh的 时候 使用的是非持久化的查询 因为是多服务器查询 query getSession createSQLQuery sql setResultTransformer Transform
  • 2023-9-14 最长上升子序列

    题目链接 最长上升子序列 include
  • C# 序列化与反序列化几种格式的转换

    这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化 将object对象序列化常见的两种方式即string和xml对象 第一种将object转换为string对象 这种比较简单没有什么可谈的 public string