C#中XML、JSON、类T数据格式之间的转换
在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数据格式之间的转换相关推荐
- JSON对象与字符串之间的转换
JSON对象与字符串之间的转换 JSON转换成字符串 字符串转换成JSON JavaScript中内置了一个JSON对象,可以用来进行JSON与字符串之间的转换. JSON转换成字符串 使用:JSON ...
- 最优化——线性规划中最大规划和最小规划之间的转换
最优化--线性规划中最大规划和最小规划之间的转换 max∑j=1ncjxj⇒−(min∑j=1n−cjxj)X=(xi...xn)T∈Ω\max \sum_{j=1}^{n} c_{j} x_{j ...
- JSON字符串和对象之间的转换
使用jackSON来实现JSON字符串和对象之间的转换 引入maven <!--jackson--><dependency><groupId>com.fasterx ...
- .Net中XML,JSON的几种处理方式
一.XML: 1.基本了解: xml,Extensible markup language可扩展标记语言,用于数据的传输或保存,特点,格式非常整齐数据清晰明了,并且任何语言都内置了xml分析引擎, 不 ...
- Java中字节数组和十六进制字符串之间的转换
1. 概述 在本教程中,我们将看看将字节数组转换为十六进制字符串,反之亦然的不同方法. 我们还将了解转换机制并编写我们的实现来实现这一点. 2. 字节和十六进制之间的转换 首先,我们来看看字节和十六进 ...
- 如何在Excel中的日期和Unix时间戳之间进行转换?
Unix时间戳也被称为纪元时间或POSIX时间,这在很多操作系统或文件格式中被广泛使用. 本教程讨论Excel中日期和Unix时间戳之间的转换. 将日期转换为时间戳 将日期和时间转换为时间戳 将时间戳 ...
- 使用fastjson工具类json字符串和对象之间的转换
文章目录 一.引入依赖 二.创建user实体类 三.测试 一.引入依赖 <!--字符串和对象操作工具类 Start--><dependency><groupId>c ...
- js中的json对象和字符串之间的转化
字符串转对象(strJSON代表json字符串) var obj = eval(strJSON); var obj = strJSON.parseJSON(); var obj = ...
- json数据和json数据与python之间的转换
什么是xml和json: 是一种通用的数据格式,可以用于不同编程语言之间的叫数据交流 json相对于xml更小,传输速度更快,更安全 json数据 json数据的格式要求:1.一个json有且只有一个 ...
最新文章
- iOS核心动画高级技术(十三) 高效绘图
- Java实现 简单聊天软件
- python 画三维函数图-Python画三维图-----插值平滑数据
- $unit编译单元声明
- 数据库---增删改查
- 部署被测软件应用和中间件_使用FlexDeploy对融合中间件应用程序进行自动化软件测试...
- python少儿编程课件ppt_Python课程第五期
- 前端学习(773):内置对象介绍
- 女朋友拿走程序员的什么最不能忍?直到程序员看到这个,无法忍受!
- (55)FPGA条件选择无优先级(if-else)
- java子类访问父类私有成员_Java中子类可以继承父类的私有成员,但是不能(直接)访问!!!...
- BDS Business Development Studio
- SylixOS 网络文件系统 nfs 的使用
- 基于javaweb+jsp的员工绩效考核管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax)
- mapbox/minemap 首屏固定比例尺为1:20
- vue中activated
- 分享一款免费实用的野外调查巡检、户外旅行、外业作业地图数据采集软件
- 安卓逆向——Xposed插件常用HOOK方法
- 四、PHP处理字符串常用函数
- 51款BI产品、80种可视化工具、80张图(总有一款适合你)