在C#中,XML与JSON之间可以相互转化

XML与T类型也可以相互转化【XML有且只有一个根节点】

JSON与T类型也可以相互转化。

新建控制台应用程序JsonToXmlToClassDemo,(.net 4.5),

添加对System.Web.Extensions程序集的引用,以及添加Newtonsoft.Json.dll开源类库的引用。

一、XML与实例化类之间的转化

类XmlSerializeUtil的源程序如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;namespace JsonToXmlToClassDemo
{/// <summary>/// XML与实例化类之间的转化/// </summary>public sealed class XmlSerializeUtil{/// <summary>/// 类的对象转换为xml字符串,/// 生成的xml的根节点就是T的类型名称/// </summary>/// <typeparam name="T"></typeparam>/// <param name="t"></param>/// <param name="encoding"></param>/// <returns></returns>public static string ObjectToXml<T>(T t, Encoding encoding){XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));using (MemoryStream ms = new MemoryStream()){using (XmlTextWriter xmlWriter = new XmlTextWriter(ms, encoding)){xmlSerializer.Serialize(xmlWriter, t);return encoding.GetString(ms.ToArray()).Trim();}}}/// <summary>/// xml字符串转实体类,xml字符串的根节点一定要与类名一致,否则将产生错误/// </summary>/// <typeparam name="T"></typeparam>/// <param name="xmlString"></param>/// <param name="encoding"></param>/// <returns></returns>public static T XmlToObject<T>(string xmlString, Encoding encoding){XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));using (MemoryStream ms = new MemoryStream(encoding.GetBytes(xmlString))){return (T)xmlSerializer.Deserialize(ms);}}}
}

二、Json与类T对象之间的相互转化。

可以使用类System.Web.Script.Serialization.JavaScriptSerializer 或者Newtonsoft.Json.JsonConvert

类JsonSerializeUtil源程序如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using Newtonsoft.Json;namespace JsonToXmlToClassDemo
{/// <summary>/// Json与类T对象之间的相互转化/// </summary>public sealed class JsonSerializeUtil{/// <summary>/// 将一个T对象转化为json字符串/// </summary>/// <typeparam name="T"></typeparam>/// <param name="t"></param>/// <returns></returns>public static string ObjectToJson<T>(T t){//需要添加System.Web.Extensions程序集的引用JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();return javaScriptSerializer.Serialize(t);}/// <summary>/// 将Json字符串反序列化为一个T对象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="jsonString"></param>/// <returns></returns>public static T JsonToObject<T>(string jsonString){JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();return javaScriptSerializer.Deserialize<T>(jsonString);}/// <summary>/// 将一个T对象转化为json字符串,使用Newtonsoft.Json/// </summary>/// <typeparam name="T"></typeparam>/// <param name="t"></param>/// <returns></returns>public static string ObjectToJsonExtension<T>(T t){//需要添加Newtonsoft.Json.dll类库的引用return JsonConvert.SerializeObject(t, Formatting.Indented);}/// <summary>/// 将Json字符串反序列化为一个T对象,使用Newtonsoft.Json/// </summary>/// <typeparam name="T"></typeparam>/// <param name="jsonString"></param>/// <returns></returns>public static T JsonToObjectExtension<T>(string jsonString){return JsonConvert.DeserializeObject<T>(jsonString);}}
}

三、Json与Xml之间的相互转化

类JsonAndXmlConverterUtil的源程序如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Xml;namespace JsonToXmlToClassDemo
{/// <summary>/// Json与Xml之间的相互转化/// </summary>public sealed class JsonAndXmlConverterUtil{/// <summary>/// 将某一个xml节点转化为json字符串/// XmlDocument也是一种XmlNode/// </summary>/// <param name="node"></param>/// <returns></returns>public static string XmlToJson(XmlNode node){return JsonConvert.SerializeXmlNode(node, Newtonsoft.Json.Formatting.Indented);}/// <summary>/// Json字符串转xml文档/// </summary>/// <param name="jsonString"></param>/// <returns></returns>public static XmlDocument JsonToXml(string jsonString){//如果没有配置根节点名称,可能会转换异常return JsonConvert.DeserializeXmlNode(jsonString, "Root");}}
}

四、测试源程序Program如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;namespace JsonToXmlToClassDemo
{class Program{static void Main(string[] args){Console.SetWindowSize(150, 40);Employee employee = new Employee(){CoreId = 66,EmployeeName = "北洛",EmployeeAddress = "天鹿城",BirthWeek = DayOfWeek.Friday};try{string result = XmlSerializeUtil.ObjectToXml(employee, Encoding.UTF8);Console.WriteLine(result);Console.WriteLine();result = JsonSerializeUtil.ObjectToJson(employee);Console.WriteLine(result);Console.WriteLine();result = JsonSerializeUtil.ObjectToJsonExtension(employee);Console.WriteLine(result);Console.WriteLine();XmlDocument xmlDoc = JsonAndXmlConverterUtil.JsonToXml(result);Console.WriteLine(xmlDoc.InnerXml);Console.WriteLine();result = JsonAndXmlConverterUtil.XmlToJson(xmlDoc);Console.WriteLine(result);Console.WriteLine();Console.WriteLine("json字符串转化为对应的类时,如果不匹配类的格式,转化的类不为空,但类的每一个属性值都是默认值 0,false或者空值");Employee emp = JsonSerializeUtil.JsonToObject<Employee>(result);Console.WriteLine(emp);Console.WriteLine();string xmlString = "<Employee><CoreId>4</CoreId><EmployeeName>云无月</EmployeeName></Employee>";Employee employeeTest = XmlSerializeUtil.XmlToObject<Employee>(xmlString, Encoding.UTF8);Console.WriteLine(employeeTest);Console.WriteLine();Console.WriteLine("xml字符串转换为对应的类时,根节点的名称一定是类的名称,区分大小写。否则将转换异常");xmlString = "<EmployeeXX><CoreId>4</CoreId><EmployeeName>云无月</EmployeeName></EmployeeXX>";employeeTest = XmlSerializeUtil.XmlToObject<Employee>(xmlString, Encoding.UTF8);Console.WriteLine(employeeTest);Console.WriteLine();}catch (Exception ex){Console.WriteLine(ex.Message);}Console.ReadLine();}}/// <summary>/// 员工类/// </summary>public class Employee{/// <summary>/// 编号/// </summary>public int CoreId { get; set; }/// <summary>/// 姓名/// </summary>public string EmployeeName { get; set; }/// <summary>/// 地址/// </summary>public string EmployeeAddress { get; set; }/// <summary>/// 生日是星期几/// </summary>[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]public DayOfWeek BirthWeek { get; set; }/// <summary>/// 直接打印该类的对象信息/// </summary>/// <returns></returns>public override string ToString(){return $"{{\"CoreId\":{CoreId},\"EmployeeName\":\"{EmployeeName}\",\"EmployeeAddress\":\"{EmployeeAddress}\",\"BirthWeek\":\"{BirthWeek}\"}}";}}
}

五、测试运行如图:

C#中XML、JSON、类T数据格式之间的转换相关推荐

  1. JSON对象与字符串之间的转换

    JSON对象与字符串之间的转换 JSON转换成字符串 字符串转换成JSON JavaScript中内置了一个JSON对象,可以用来进行JSON与字符串之间的转换. JSON转换成字符串 使用:JSON ...

  2. 最优化——线性规划中最大规划和最小规划之间的转换

    最优化--线性规划中最大规划和最小规划之间的转换 max⁡∑j=1ncjxj⇒−(min⁡∑j=1n−cjxj)X=(xi...xn)T∈Ω\max \sum_{j=1}^{n} c_{j} x_{j ...

  3. JSON字符串和对象之间的转换

    使用jackSON来实现JSON字符串和对象之间的转换 引入maven <!--jackson--><dependency><groupId>com.fasterx ...

  4. .Net中XML,JSON的几种处理方式

    一.XML: 1.基本了解: xml,Extensible markup language可扩展标记语言,用于数据的传输或保存,特点,格式非常整齐数据清晰明了,并且任何语言都内置了xml分析引擎, 不 ...

  5. Java中字节数组和十六进制字符串之间的转换

    1. 概述 在本教程中,我们将看看将字节数组转换为十六进制字符串,反之亦然的不同方法. 我们还将了解转换机制并编写我们的实现来实现这一点. 2. 字节和十六进制之间的转换 首先,我们来看看字节和十六进 ...

  6. 如何在Excel中的日期和Unix时间戳之间进行转换?

    Unix时间戳也被称为纪元时间或POSIX时间,这在很多操作系统或文件格式中被广泛使用. 本教程讨论Excel中日期和Unix时间戳之间的转换. 将日期转换为时间戳 将日期和时间转换为时间戳 将时间戳 ...

  7. 使用fastjson工具类json字符串和对象之间的转换

    文章目录 一.引入依赖 二.创建user实体类 三.测试 一.引入依赖 <!--字符串和对象操作工具类 Start--><dependency><groupId>c ...

  8. js中的json对象和字符串之间的转化

    字符串转对象(strJSON代表json字符串)    var obj = eval(strJSON);    var obj = strJSON.parseJSON();    var obj = ...

  9. json数据和json数据与python之间的转换

    什么是xml和json: 是一种通用的数据格式,可以用于不同编程语言之间的叫数据交流 json相对于xml更小,传输速度更快,更安全 json数据 json数据的格式要求:1.一个json有且只有一个 ...

最新文章

  1. iOS核心动画高级技术(十三) 高效绘图
  2. Java实现 简单聊天软件
  3. python 画三维函数图-Python画三维图-----插值平滑数据
  4. $unit编译单元声明
  5. 数据库---增删改查
  6. 部署被测软件应用和中间件_使用FlexDeploy对融合中间件应用程序进行自动化软件测试...
  7. python少儿编程课件ppt_Python课程第五期
  8. 前端学习(773):内置对象介绍
  9. 女朋友拿走程序员的什么最不能忍?直到程序员看到这个,无法忍受!
  10. (55)FPGA条件选择无优先级(if-else)
  11. java子类访问父类私有成员_Java中子类可以继承父类的私有成员,但是不能(直接)访问!!!...
  12. BDS Business Development Studio
  13. SylixOS 网络文件系统 nfs 的使用
  14. 基于javaweb+jsp的员工绩效考核管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax)
  15. mapbox/minemap 首屏固定比例尺为1:20
  16. vue中activated
  17. 分享一款免费实用的野外调查巡检、户外旅行、外业作业地图数据采集软件
  18. 安卓逆向——Xposed插件常用HOOK方法
  19. 四、PHP处理字符串常用函数
  20. 51款BI产品、80种可视化工具、80张图(总有一款适合你)

热门文章

  1. 白衣观音大士灵感神咒
  2. sdkman 的酷炫 Logo 欢迎界面: 安装 kscript (Kotlin Shell)
  3. 曲线拟合(2)——Richards曲线
  4. 张正友畸变矫正C++代码
  5. 哆啦A梦纯HTML代码
  6. Hbase2.4.1集群安装:HMaster自动挂掉问题终于解决了
  7. 动态菜单,根据登录用户权限返回不同菜单,登录完成跳转到不同的首页
  8. 清朝十二帝记忆顺口溜
  9. 什么时候使用Redis缓存
  10. qrcode将生成的二维码转成img格式